MPC5775B Linker section failure while adding a new component into an example code

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

MPC5775B Linker section failure while adding a new component into an example code

Jump to solution
1,153 Views
DivyaVyas
Contributor II

Hello,

Context:
I am working with ENET and PHY modules and testing ping response on the MPC5775B microcontroller.
Initially, the project was functioning correctly. However, when adding a UART component, a linker section overlap issue occurred.
The project uses  linker_flash.ld file.

Issue: 

Please find the error details in the error.txt file kept in below link.

https://github.com/Divya-stack-eng/MPC5775B_LinkerAndMapFiles.git

Observation on checking the map file:

The following sections are overlapping in their Load Addresses (Flash memory):

  1. .NULLoverlaps with.sdata (0x00815100 vs 0x008150f4).
  2. .sbss overlaps with .code (0x00815104 starts both).
  3. .iplt overlaps with stack (0x008152c0 starts both).

Please find the linker file and map file, attached herewith. 

https://github.com/Divya-stack-eng/MPC5775B_LinkerAndMapFiles.git

Please provide suggestions to resolve this.

Thanks alot in advance,

Best Regards,

Divya 

 

0 Kudos
Reply
1 Solution
1,046 Views
DivyaVyas
Contributor II

Hello,

I could resolve the IVOR14 exception. All exception issues and memory issues are resolved.

Following sequence is required for the current PHY:

* Step 1: Initialize ENET (Ethernet MAC) */
ENET_DRV_Init(INST_ETHERNET1, &ethernet1_State, &ethernet1_InitConfig0,
ethernet1_buffConfigArr0, ethernet1_MacAddr);

/* Step 2: Enable MDIO (Management Data Input/Output) */
ENET_DRV_EnableMDIO(INST_ETHERNET1, false); // false = Do not disable preamble

/* Step 3: Initialize PHY Framework */
PHY_FrameworkInit(&phyConfig[phy], &phyDrivers[phy]); //to initialize the config pointers

/* Step 4: Initialize PHY (Registers, Basic Setup) */
PHY_Init(phy);

/* Step 5: Enable Auto-Negotiation */
PHY_EnableAutoneg(phy);

/* Step 6: Enable PHY Interrupts */
PHY_EnableInterrupts(phy);

/* Step 7: Verify PHY Link Status */
PHY_GetLinkStatus(phy, &linkstateUp);
if (!linkstateUp)
{
// Handle No Link Error
}

These changes are needed since the current PHY we are using is KSZ8061RNB, and we have configured the PHY type as Generic.
Also, Since 2 pairs of wires are used, Auto negotiation is opted in HW (via pin strapping) and SW Configurations. 

Thanks, and Kind Regards,
Divya V

View solution in original post

0 Kudos
Reply
3 Replies
1,134 Views
davidtosenovjan
NXP TechSupport
NXP TechSupport

Unfortunately your links are not visible to me.

Usually it is possible to modify linker command file address ranges to fit the need of your code. Lengthen some segments and shorten others.

0 Kudos
Reply
1,084 Views
DivyaVyas
Contributor II

Hello,

Error: "section .NULL LMA [00815100,00816f27] overlaps section .sdata LMA [008150f4,00815103]
collect2.exe: error: ld returned 1 exit status"

For resolving the overlap error, I increased the alignment for .sdata section from 4 to 16. 

Also, I added a buffer space of 0x300 in .sdata to prevent overlap. 

I made .NULL defined explicitly in linker script, ensuring that it starts after .sdata_end_..

Then, I could find the error being resolved. But, upon flashing, I could find IVOR13 (Data TLB Error Interrupt, which was triggering SWTI IRQ Handler. 

For checking it better, I created a new project. Added Enet and Phy components.

There was no overlap error. But, I could find IVOR1 exception (Machine check) while flashing. 

Upon enabling the FEC internal clock (FEC0_Clk), the error got resolved. But still upon executing Phy_Init, IVOR14 is encountered. I understand that the MDIO interface has to be enabled and ENET peripheral has to be made to run mode, before Phy_init. Probably this can be the root cause.  In MPC5775B reference manual, I couldn't find MC_ME or clock generation module. Would you suggest how to enable Enet and MDIO. How to ensure that ENET is in RUN mode before PHY initialization, in MPC5775B.

int main(void)
{
  /* Write your local variable definition here */

  /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
  #ifdef PEX_RTOS_INIT
    PEX_RTOS_INIT();                   /* Initialization of the selected RTOS. Macro is defined by the RTOS component. */
  #endif
  /*** End of Processor Expert internal initialization.                    ***/

	/* Initialize clocks */
	CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT, g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
	CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);

	/* Initialize pin configurations */
	PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);

	/* Configures the SIU (System Integration Unit) */
	SIU->FECCR &= ~SIU_FECCR_FM_MASK; // Specifically, it clears the FM (Fault Mode) bit in FECCR (Fault Error Control Register)

	/* Initialize Ethernet */
	ENET_DRV_Init(INST_ETHERNET1, &ethernet1_State, &ethernet1_InitConfig0, ethernet1_buffConfigArr0, ethernet1_MacAddr);

	/* Initialize PHY */
    PHY_Init(phy);

	/* Main loop */
	for (;;) {
		/* Insert a small delay to make the blinking visible */
		delay(720000);
		/* Toggle output value LED2 */
		PINS_DRV_TogglePins(LED1_PORT, (1 << LED1_PIN));
	}

  /*** Don't write any code pass this line, or it will be deleted during code generation. ***/
  /*** RTOS startup code. Macro PEX_RTOS_START is defined by the RTOS component. DON'T MODIFY THIS CODE!!! ***/
  #ifdef PEX_RTOS_START
    PEX_RTOS_START();                  /* Startup of the selected RTOS. Macro is defined by the RTOS component. */
  #endif
  /*** End of RTOS startup code.  ***/
  /*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
  for(;;) {
    if(exit_code != 0) {
      break;
    }
  }
  return exit_code;
  /*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/

 

Thank you so much,

Divya V

 

 

 

 

 

 

 

 

 

0 Kudos
Reply
1,047 Views
DivyaVyas
Contributor II

Hello,

I could resolve the IVOR14 exception. All exception issues and memory issues are resolved.

Following sequence is required for the current PHY:

* Step 1: Initialize ENET (Ethernet MAC) */
ENET_DRV_Init(INST_ETHERNET1, &ethernet1_State, &ethernet1_InitConfig0,
ethernet1_buffConfigArr0, ethernet1_MacAddr);

/* Step 2: Enable MDIO (Management Data Input/Output) */
ENET_DRV_EnableMDIO(INST_ETHERNET1, false); // false = Do not disable preamble

/* Step 3: Initialize PHY Framework */
PHY_FrameworkInit(&phyConfig[phy], &phyDrivers[phy]); //to initialize the config pointers

/* Step 4: Initialize PHY (Registers, Basic Setup) */
PHY_Init(phy);

/* Step 5: Enable Auto-Negotiation */
PHY_EnableAutoneg(phy);

/* Step 6: Enable PHY Interrupts */
PHY_EnableInterrupts(phy);

/* Step 7: Verify PHY Link Status */
PHY_GetLinkStatus(phy, &linkstateUp);
if (!linkstateUp)
{
// Handle No Link Error
}

These changes are needed since the current PHY we are using is KSZ8061RNB, and we have configured the PHY type as Generic.
Also, Since 2 pairs of wires are used, Auto negotiation is opted in HW (via pin strapping) and SW Configurations. 

Thanks, and Kind Regards,
Divya V

0 Kudos
Reply
%3CLINGO-SUB%20id%3D%22lingo-sub-2060105%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EMPC5775B%20Linker%20section%20failure%20while%20adding%20a%20new%20component%20into%20an%20example%20code%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2060105%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%2C%3C%2FP%3E%3CP%3E%3CSTRONG%3EContext%3A%3C%2FSTRONG%3E%3CBR%20%2F%3EI%20am%20working%20with%20ENET%20and%20PHY%20modules%20and%20testing%20ping%20response%20on%20the%20MPC5775B%20microcontroller.%3CBR%20%2F%3EInitially%2C%20the%20project%20was%20functioning%20correctly.%20However%2C%20when%20adding%20a%20UART%20component%2C%20a%20linker%20section%20overlap%20issue%20occurred.%3CBR%20%2F%3EThe%20project%20uses%26nbsp%3B%20linker_flash.ld%20file.%3C%2FP%3E%3CP%3E%3CSTRONG%3EIssue%3A%26nbsp%3B%3C%2FSTRONG%3E%3C%2FP%3E%3CP%3EPlease%20find%20the%20error%20details%20in%20the%20error.txt%20file%20kept%20in%20below%20link.%3C%2FP%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fgithub.com%2FDivya-stack-eng%2FMPC5775B_LinkerAndMapFiles.git%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Fgithub.com%2FDivya-stack-eng%2FMPC5775B_LinkerAndMapFiles.git%3C%2FA%3E%3C%2FP%3E%3CP%3E%3CSTRONG%3EObservation%20on%20checking%20the%20map%20file%3A%3C%2FSTRONG%3E%3C%2FP%3E%3CP%3EThe%20following%20sections%20are%20overlapping%20in%20their%20Load%20Addresses%20(Flash%20memory)%3A%3C%2FP%3E%3COL%3E%3CLI%3E%3CSTRONG%3E.NULLoverlaps%20with.sdata%3C%2FSTRONG%3E%20(0x00815100%20vs%200x008150f4).%3C%2FLI%3E%3CLI%3E%3CSTRONG%3E.sbss%20overlaps%20with%20.code%3C%2FSTRONG%3E%20(0x00815104%20starts%20both).%3C%2FLI%3E%3CLI%3E%3CSTRONG%3E.iplt%20overlaps%20with%20stack%3C%2FSTRONG%3E%20(0x008152c0%20starts%20both).%3C%2FLI%3E%3C%2FOL%3E%3CP%3EPlease%20find%20the%20linker%20file%20and%20map%20file%2C%20attached%20herewith.%26nbsp%3B%3C%2FP%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fgithub.com%2FDivya-stack-eng%2FMPC5775B_LinkerAndMapFiles.git%22%20target%3D%22_blank%22%20rel%3D%22noopener%20nofollow%20noreferrer%22%3Ehttps%3A%2F%2Fgithub.com%2FDivya-stack-eng%2FMPC5775B_LinkerAndMapFiles.git%3C%2FA%3E%3C%2FP%3E%3CP%3EPlease%20provide%20suggestions%20to%20resolve%20this.%3C%2FP%3E%3CP%3EThanks%20alot%20in%20advance%2C%3C%2FP%3E%3CP%3EBest%20Regards%2C%3C%2FP%3E%3CP%3EDivya%26nbsp%3B%3C%2FP%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2063565%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERe%3A%20MPC5775B%20Linker%20section%20failure%20while%20adding%20a%20new%20component%20into%20an%20example%20code%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2063565%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%2C%3C%2FP%3E%3CP%3EI%20could%20resolve%20the%20IVOR14%20exception.%20All%20exception%20issues%20and%20memory%20issues%20are%20resolved.%3C%2FP%3E%3CP%3EFollowing%20sequence%20is%20required%20for%20the%20current%20PHY%3A%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3E*%20Step%201%3A%20Initialize%20ENET%20(Ethernet%20MAC)%20*%2F%0AENET_DRV_Init(INST_ETHERNET1%2C%20%26amp%3Bethernet1_State%2C%20%26amp%3Bethernet1_InitConfig0%2C%0Aethernet1_buffConfigArr0%2C%20ethernet1_MacAddr)%3B%0A%0A%2F*%20Step%202%3A%20Enable%20MDIO%20(Management%20Data%20Input%2FOutput)%20*%2F%0AENET_DRV_EnableMDIO(INST_ETHERNET1%2C%20false)%3B%20%2F%2F%20false%20%3D%20Do%20not%20disable%20preamble%0A%0A%2F*%20Step%203%3A%20Initialize%20PHY%20Framework%20*%2F%0APHY_FrameworkInit(%26amp%3BphyConfig%5Bphy%5D%2C%20%26amp%3BphyDrivers%5Bphy%5D)%3B%20%2F%2Fto%20initialize%20the%20config%20pointers%0A%0A%2F*%20Step%204%3A%20Initialize%20PHY%20(Registers%2C%20Basic%20Setup)%20*%2F%0APHY_Init(phy)%3B%0A%0A%2F*%20Step%205%3A%20Enable%20Auto-Negotiation%20*%2F%0APHY_EnableAutoneg(phy)%3B%0A%0A%2F*%20Step%206%3A%20Enable%20PHY%20Interrupts%20*%2F%0APHY_EnableInterrupts(phy)%3B%0A%0A%2F*%20Step%207%3A%20Verify%20PHY%20Link%20Status%20*%2F%0APHY_GetLinkStatus(phy%2C%20%26amp%3BlinkstateUp)%3B%0Aif%20(!linkstateUp)%0A%7B%0A%2F%2F%20Handle%20No%20Link%20Error%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3EThese%20changes%20are%20needed%20since%20the%20current%20PHY%20we%20are%20using%20is%20KSZ8061RNB%2C%20and%20we%20have%20configured%20the%20PHY%20type%20as%20Generic.%3CBR%20%2F%3EAlso%2C%20Since%202%20pairs%20of%20wires%20are%20used%2C%20Auto%20negotiation%20is%20opted%20in%20HW%20(via%20pin%20strapping)%20and%20SW%20Configurations.%26nbsp%3B%3C%2FP%3E%3CP%3EThanks%2C%20and%20Kind%20Regards%2C%3CBR%20%2F%3EDivya%20V%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2062545%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERe%3A%20MPC5775B%20Linker%20section%20failure%20while%20adding%20a%20new%20component%20into%20an%20example%20code%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2062545%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%2C%3C%2FP%3E%3CP%3EError%3A%20%22section%20.NULL%20LMA%20%5B00815100%2C00816f27%5D%20overlaps%20section%20.sdata%20LMA%20%5B008150f4%2C00815103%5D%3CBR%20%2F%3Ecollect2.exe%3A%20error%3A%20ld%20returned%201%20exit%20status%22%3C%2FP%3E%3CP%3EFor%20resolving%20the%20overlap%20error%2C%20I%20increased%20the%20alignment%20for%20.sdata%20section%20from%204%20to%2016.%26nbsp%3B%3C%2FP%3E%3CP%3EAlso%2C%20I%20added%20a%20buffer%20space%20of%200x300%20in%20.sdata%20to%20prevent%20overlap.%26nbsp%3B%3C%2FP%3E%3CP%3EI%20made%20.NULL%20defined%20explicitly%20in%20linker%20script%2C%20ensuring%20that%20it%20starts%20after%20.sdata_end_..%3C%2FP%3E%3CP%3EThen%2C%20I%20could%20find%20the%20error%20being%20resolved.%20But%2C%20upon%20flashing%2C%20I%20could%20find%20IVOR13%20(Data%20TLB%20Error%20Interrupt%2C%20which%20was%20triggering%20SWTI%20IRQ%20Handler.%26nbsp%3B%3C%2FP%3E%3CP%3EFor%20checking%20it%20better%2C%20I%20created%20a%20new%20project.%20Added%20Enet%20and%20Phy%20components.%3C%2FP%3E%3CP%3EThere%20was%20no%20overlap%20error.%20But%2C%20I%20could%20find%20IVOR1%20exception%20(Machine%20check)%20while%20flashing.%26nbsp%3B%3C%2FP%3E%3CP%3EUpon%20enabling%20the%20FEC%20internal%20clock%20(FEC0_Clk)%2C%20the%20error%20got%20resolved.%20But%20still%20upon%20executing%20Phy_Init%2C%20IVOR14%20is%20encountered.%20I%20understand%20that%20the%20MDIO%20interface%20has%20to%20be%20enabled%20and%20ENET%20peripheral%20has%20to%20be%20made%20to%20run%20mode%2C%20before%20Phy_init.%20Probably%20this%20can%20be%20the%20root%20cause.%26nbsp%3B%20In%20MPC5775B%20reference%20manual%2C%20I%20couldn't%20find%20MC_ME%20or%20clock%20generation%20module.%20Would%20you%20suggest%20how%20to%20enable%20Enet%20and%20MDIO.%20How%20to%20ensure%20that%20ENET%20is%20in%20RUN%20mode%20before%20PHY%20initialization%2C%20in%20MPC5775B.%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3Eint%20main(void)%0A%7B%0A%20%20%2F*%20Write%20your%20local%20variable%20definition%20here%20*%2F%0A%0A%20%20%2F***%20Processor%20Expert%20internal%20initialization.%20DON'T%20REMOVE%20THIS%20CODE!!!%20***%2F%0A%20%20%23ifdef%20PEX_RTOS_INIT%0A%20%20%20%20PEX_RTOS_INIT()%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F*%20Initialization%20of%20the%20selected%20RTOS.%20Macro%20is%20defined%20by%20the%20RTOS%20component.%20*%2F%0A%20%20%23endif%0A%20%20%2F***%20End%20of%20Processor%20Expert%20internal%20initialization.%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20***%2F%0A%0A%09%2F*%20Initialize%20clocks%20*%2F%0A%09CLOCK_SYS_Init(g_clockManConfigsArr%2C%20CLOCK_MANAGER_CONFIG_CNT%2C%20g_clockManCallbacksArr%2C%20CLOCK_MANAGER_CALLBACK_CNT)%3B%0A%09CLOCK_SYS_UpdateConfiguration(0U%2C%20CLOCK_MANAGER_POLICY_AGREEMENT)%3B%0A%0A%09%2F*%20Initialize%20pin%20configurations%20*%2F%0A%09PINS_DRV_Init(NUM_OF_CONFIGURED_PINS%2C%20g_pin_mux_InitConfigArr)%3B%0A%0A%09%2F*%20Configures%20the%20SIU%20(System%20Integration%20Unit)%20*%2F%0A%09SIU-%26gt%3BFECCR%20%26amp%3B%3D%20~SIU_FECCR_FM_MASK%3B%20%2F%2F%20Specifically%2C%20it%20clears%20the%20FM%20(Fault%20Mode)%20bit%20in%20FECCR%20(Fault%20Error%20Control%20Register)%0A%0A%09%2F*%20Initialize%20Ethernet%20*%2F%0A%09ENET_DRV_Init(INST_ETHERNET1%2C%20%26amp%3Bethernet1_State%2C%20%26amp%3Bethernet1_InitConfig0%2C%20ethernet1_buffConfigArr0%2C%20ethernet1_MacAddr)%3B%0A%0A%09%2F*%20Initialize%20PHY%20*%2F%0A%20%20%20%20PHY_Init(phy)%3B%0A%0A%09%2F*%20Main%20loop%20*%2F%0A%09for%20(%3B%3B)%20%7B%0A%09%09%2F*%20Insert%20a%20small%20delay%20to%20make%20the%20blinking%20visible%20*%2F%0A%09%09delay(720000)%3B%0A%09%09%2F*%20Toggle%20output%20value%20LED2%20*%2F%0A%09%09PINS_DRV_TogglePins(LED1_PORT%2C%20(1%20%26lt%3B%26lt%3B%20LED1_PIN))%3B%0A%09%7D%0A%0A%20%20%2F***%20Don't%20write%20any%20code%20pass%20this%20line%2C%20or%20it%20will%20be%20deleted%20during%20code%20generation.%20***%2F%0A%20%20%2F***%20RTOS%20startup%20code.%20Macro%20PEX_RTOS_START%20is%20defined%20by%20the%20RTOS%20component.%20DON'T%20MODIFY%20THIS%20CODE!!!%20***%2F%0A%20%20%23ifdef%20PEX_RTOS_START%0A%20%20%20%20PEX_RTOS_START()%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F*%20Startup%20of%20the%20selected%20RTOS.%20Macro%20is%20defined%20by%20the%20RTOS%20component.%20*%2F%0A%20%20%23endif%0A%20%20%2F***%20End%20of%20RTOS%20startup%20code.%20%20***%2F%0A%20%20%2F***%20Processor%20Expert%20end%20of%20main%20routine.%20DON'T%20MODIFY%20THIS%20CODE!!!%20***%2F%0A%20%20for(%3B%3B)%20%7B%0A%20%20%20%20if(exit_code%20!%3D%200)%20%7B%0A%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20return%20exit_code%3B%0A%20%20%2F***%20Processor%20Expert%20end%20of%20main%20routine.%20DON'T%20WRITE%20CODE%20BELOW!!!%20***%2F%0A%7D%20%2F***%20End%20of%20main%20routine.%20DO%20NOT%20MODIFY%20THIS%20TEXT!!!%20***%2F%3C%2FCODE%3E%3C%2FPRE%3E%3CBR%20%2F%3E%3CP%3EThank%20you%20so%20much%2C%3C%2FP%3E%3CP%3EDivya%20V%3C%2FP%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2060321%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERe%3A%20MPC5775B%20Linker%20section%20failure%20while%20adding%20a%20new%20component%20into%20an%20example%20code%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2060321%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EUnfortunately%20your%20links%20are%20not%20visible%20to%20me.%3C%2FP%3E%0A%3CP%3EUsually%20it%20is%20possible%20to%20modify%20linker%20command%20file%20address%20ranges%20to%20fit%20the%20need%20of%20your%20code.%20%3CSPAN%20class%3D%22HwtZe%22%3E%3CSPAN%20class%3D%22jCAhz%20ChMk0b%22%3E%3CSPAN%20class%3D%22ryNqvb%22%3ELengthen%20some%20segments%20and%20shorten%20others%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E.%3C%2FP%3E%3C%2FLINGO-BODY%3E