¸í·É ¾ð¾î´Â ¸µÅ© ÇÁ·Î¼¼½º¿¡ ´ëÇÑ ¸í½ÃÀûÀÎ Á¦¾î¸¦ Á¦°øÇÑ´Ù. ¸µÄ¿ÀÇ ÀÔ·Â ÆÄÀϵé°ú Ãâ·Â »çÀÌÀÇ ¿ÏÀüÇÑ ¸ÊÇÎ ½ºÆåÀ» Áö¿øÇÑ´Ù. ÀÌ°ÍÀº ´ÙÀ½°ú °°Àº °ÍµéÀ» Á¦¾îÇÑ´Ù.
¸µÄ¿¿¡°Ô `-T' ¿É¼ÇÀ» ÅëÇؼ ¸í½ÃÀûÀ¸·Î ¶Ç´Â ÀÏ¹Ý ÆÄÀÏó·³
¾Ï¹¬ÀûÀ¸·Î ¸í·É ÆÄÀÏ(¸µÄ¿ ½ºÅ©¸³Æ®¶ó°í Çϱ⵵ ÇÑ´Ù)À» Á¦°øÇÒ ¼ö ÀÖ´Ù.
ÀϹÝÀûÀ¸·Î `-T' ¿É¼ÇÀ» »ç¿ëÇؾ߸¸ ÇÑ´Ù. ¹¬½ÃÀûÀÎ ¸µÄ¿ ½ºÅ©¸³Æ®´Â
µðÆúÆ® ¸µÄ¿ ½ºÅ©¸³Æ®¸¦ ´ëüÇѴٱ⠺¸´Ù´Â È®ÀåÇÏ°íÀÚ ÇÒ ¶§¸¸ »ç¿ëµÇ¾î¾ß
ÇÑ´Ù; ÀüÇüÀûÀ¸·Î ¹¬½ÃÀû ¸µÄ¿ ½ºÅ©¸³Æ®´Â INPUT
¶Ç´Â GROUP
¸í·Éµé¸¸À¸·Î ÀÌ·ç¾îÁ® ÀÖÀ» °ÍÀÌ´Ù.
¸µÄ¿°¡ Áö¿øµÇ´Â ¿ÀºêÁ§Æ® ¶Ç´Â ¾ÆÄ«À̺ê Æ÷¸äÀ¸·Î ÀνÄÇÒ ¼ö ¾ø°Å³ª ¶Ç´Â ¸µÄ¿ ½ºÅ©¸³Æ®·Î ÀνÄÇÒ ¼ö ¾ø´Â ÆÄÀÏÀ» ¿ÀÇÂÇϸé ÀÌ°ÍÀº ¿¡·¯¸¦ º¸°íÇÑ´Ù.
ld
¸í·É ¾ð¾î´Â ¹®Àå(statement)µéÀÇ ¸ðÀÓÀÌ´Ù; ¾î¶² °ÍµéÀº Ưº°ÇÑ
¿É¼ÇÀ» ¼³Á¤ÇÏ´Â ´Ü¼øÇÑ Å°¿öµåµéÀÌ°í ¾î¶² °ÍµéÀº ÀÔ·Â ÆÄÀϵéÀ̳ª À̸§
Ãâ·Â ÆÄÀϵéÀ» ¼±ÅÃÇÏ°í ±×·ìÇÎÇÏ´Â µ¥ »ç¿ëµÈ´Ù; ±×¸®°í µÎ ¹®Àå ŸÀÔµéÀÌ
±âÃÊÀûÀÌ¸ç ¸µÅ© ÇÁ·Î¼¼½º¿¡ ³ÎÄ¡ ¿µÇâÀ» ¹ÌÄ£´Ù.
ld
¸í·É ¾ð¾îÀÇ °¡Àå ±âÃÊÀûÀÎ ¸í·ÉÀº SECTIONS
¸í·É(see section Ãâ·Â ¼½¼Ç ÁöÁ¤(Specifying Output Sections))ÀÌ´Ù. °¢ ÀÇ¹Ì ÀÖ´Â ¸í·É ½ºÅ©¸³Æ®´Â SECTIONS
¸í·ÉÀ» °¡Á®¾ß ÇÑ´Ù: ÀÌ°ÍÀº ¿©·¯ µî±ÞÀÇ ÀÚ¼¼ÇÑ ³»¿ëµéÀ» °¡Áø, Ãâ·Â ÆÄÀÏÀÇ
·¹À̾ƿôÀÇ "±×¸²(picture)"À» ÁöÁ¤ÇÑ´Ù. ¾î¶² ´Ù¸¥ ¸í·Éµµ ¸ðµç °æ¿ì¿¡
¹Ýµå½Ã ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï´Ù.
MEMORY
¸í·ÉÀº Ÿ°Ù ¾ÆÅ°ÅØÃÄ¿¡¼ »ç¿ë °¡´ÉÇÑ ¸Þ¸ð¸®¸¦ ±â¼úÇؼ
SECTIONS
¸í·ÉÀ» º¸¿ÏÇÑ´Ù. ÀÌ ¸í·ÉÀº ¿É¼ÇÀÌ´Ù; MEMORY
¸í·ÉÀ» »ç¿ëÇÏÁö ¾ÊÀ¸¸é ld
´Â ¸ðµç Ãâ·Â¿¡ ´ëÇؼ ¿¬¼ÓµÈ ºí·°À¸·Î
ÃæºÐÇÑ ¸Þ¸ð¸®°¡ »ç¿ë°¡´ÉÇÒ °ÍÀ̶ó°í ÃßÁ¤ÇÑ´Ù.
See section ¸Þ¸ð¸® ·¹À̾ƿô(Memory Layout).
¸µÄ¿ ½ºÅ©¸³Æ®¿¡¼ ÁÖ¼®À» C¿¡¼Ã³·³ ³ÖÀ» ¼ö ÀÖ´Ù; `/*'°ú `*/' ¾È¿¡ ¹À¸¸é µÈ´Ù. C¿¡¼ ó·³ ÁÖ¼®µéÀº ¹®¹ýÀûÀ¸·Î °ø¹é°ú µ¿ÀÏÇÏ´Ù.
¸¹Àº À¯¿ëÇÑ ¸í·ÉµéÀº »ê¼ú Ç¥Çö½ÄµéÀ» Æ÷ÇÔÇÑ´Ù. ¸í·É ¾ð¾î¿¡ Àִ ǥÇö½Ä¿¡ ´ëÇÑ ¹®¹ýÀº ´ÙÀ½°ú °°Àº Ư¼ºÀ» °¡Áö¸é¼ C Ç¥Çö½ÄÀÇ ¹®¹ý°ú µ¿ÀÏÇÏ´Ù:
8Áø¼ö Á¤¼ö´Â `0' µÚ¿¡ µû¶ó¿À°í 0°³ ÀÌ»óÀÇ 8Áø¼ö µðÁöÆ® (`01234567')µé·Î ÀÌ·ç¾îÁø´Ù.
_as_octal = 0157255;
10Áø¼ö Á¤¼ö´Â 0ÀÌ ¾Æ´Ñ µðÁöÆ®·Î ½ÃÀÛÇÏ°í 0°³ ÀÌ»óÀÇ µðÁöÆ®µé (`0123456789')·Î ÀÌ·ç¾îÁø´Ù.
_as_decimal = 57005;
16Áø¼ö Á¤¼ö´Â `0x'³ª `0X' µÚ¿¡ Çϳª ÀÌ»óÀÇ 16Áø¼ö µðÁöÆ®µé `0123456789abcdefABCDEF'·Î ÀÌ·ç¾îÁø´Ù.
_as_hex = 0xdead;
À½ÀÇ Á¤¼ö¸¦ ¾²±â À§Çؼ Á¢µÎ ¿¬»êÀÚ `-' (see section ¿¬»êÀÚ(Operators)) ¸¦ »ç¿ëÇÑ´Ù.
_as_neg = -57005;
ÀÌ¿Í ¾Æ¿ï·¯ K
¿Í M
°¡ »ó¼ö¸¦ °¢°¢
¹è¾¿ ÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼ ´ÙÀ½Àº ¸ðµÎ µ¿ÀÏÇÑ ¾çÀ»
°¡¸®Å²´Ù:
_fourk_1 = 4K; _fourk_2 = 4096; _fourk_3 = 0x1000;
µû¿ÈÇ¥·Î ¹Áö ¾ÊÀ¸¸é ½É¹ú À̸§µéÀº ¹®ÀÚ, ¹ØÁÙ, ¶Ç´Â Á¡À¸·Î ½ÃÀÛÇÏ°í ÀÓÀÇÀÇ ¹®ÀÚµé, ¹ØÁÙ, µðÁöÆ®, Á¡ ±×¸®°í ÇÏÀÌÇÂÀ» ´ãÀ» ¼ö ÀÖ´Ù. µû¿ÈÇ¥·Î ¹Áö ¾ÊÀº ½É¹ú À̸§µéÀº ¹Ýµå½Ã ÀÓÀÇÀÇ Å°¿öµå¿Í Ãæµ¹ÇÏ¸é ¾ÈµÈ´Ù. ÀÌ»óÇÑ ¹®ÀÚµéÀ» ´ã°í Àְųª Å°¿öµå¿Í µ¿ÀÏÇÑ À̸§À» ´ã°í ÀÖ´Â ½É¹úÀ», ½É¹ú À̸§À» °ãµû¿ÈÇ¥·Î ½Î¼, ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù:
"SECTION" = 9; "with a space" = "also with a space" + 10;
½É¹úµéÀº ¸¹Àº ºñ-¾ËÆĺª ¹®ÀÚµéÀ» ´ãÀ» ¼ö Àֱ⠶§¹®¿¡ ½É¹úµéÀ» °ø¹éµé·Î ±¸ºÐÇÏ´Â °ÍÀÌ °¡Àå ¾ÈÀüÇÏ´Ù. ¿¹¸¦ µé¾î¼ `A-B'´Â ÇϳªÀÇ ½É¹úÀÌ´Ù. ¹Ý¸é¿¡ `A - B'´Â »©±â¸¦ Æ÷ÇÔÇÏ°í Àִ ǥÇö½ÄÀÌ´Ù.
Ư¼öÇÑ ¸µÄ¿ º¯¼ö dot `.' ´Â Ç×»ó ÇöÀç Ãâ·Â À§Ä¡ Ä«¿îÅ͸¦ ´ã°í
ÀÖ´Ù. .
´Â Ç×»ó Ãâ·Â ¼½¼Ç¿¡ ÀÖ´Â À§Ä¡¸¦ ÂüÁ¶Çϱ⠶§¹®¿¡ ÀÌ°ÍÀº
Ç×»ó SECTIONS
¸í·É¾È¿¡ Àִ ǥÇö½Ä¿¡ ³ªÅ¸³ª¾ß ÇÑ´Ù. .
½É¹úÀº ÀÏ¹Ý ½É¹úÀÌ Ç¥Çö½Ä¿¡¼ Çã¿ëµÈ À§Ä¡¶ó¸é ¾îµðµçÁö ³ªÅ¸³¯ ¼ö ÀÖÁö¸¸,
ÀÌ°ÍÀÇ ÇÒ´ç(assignment)Àº ºÎÀÛ¿ëÀ» °¡Áø´Ù. ¾î¶² °ªÀ» .
½É¹ú¿¡
ÇÒ´çÇÏ´Â °ÍÀº À§Ä¡ Ä«¿îÅÍ°¡ À̵¿µÇµµ·Ï ÇÒ °ÍÀÌ´Ù.
ÀÌ°ÍÀº Ãâ·Â ¼½¼Ç¿¡ ±¸¸Û(hole)À» »ý¼ºÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. À§Ä¡
Ä«¿îÅÍ´Â µÚÂÊÀ¸·Î À̵¿µÇ¾î¼´Â ¾ÈµÈ´Ù.
SECTIONS { output : { file1(.text) . = . + 1000; file2(.text) . += 1000; file3(.text) } = 0x1234; }
ÀÌÀü ¿¹Á¦¿¡¼ file1
Àº Ãâ·Â ¼½¼ÇÀÇ Ã³À½¿¡ À§Ä¡ÇÑ´Ù. ±× µÚ¿¡
1000¹ÙÀÌÆ®ÀÇ Æ´»õ°¡ ÀÖ´Ù. ±×¸®°í file2
°¡ ³ªÅ¸³´Ù. ±×¸®°í ±×
µÚ¿¡ ¶Ç 1000¹ÙÀÌÆ®ÀÇ Æ´»õ°¡ ÀÖ°í ±× µÚ¿¡ file3
°¡ ·ÎµåµÈ´Ù.
`= 0x1234'¶ó°í Ç¥±âÇÏ´Â °ÍÀº ¾î¶² µ¥ÀÌÅÍ°¡ ±× Æ´»õ¿¡ ±â·ÏµÇ¾î¾ß ÇÒ
°ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù (see section ¿É¼ÇÀÎ ¼½¼Ç ¼Ó¼º(Optional Section Attributes)).
@vfill
¸µÄ¿´Â ´ÙÀ½°ú °°ÀÌ Ç¥ÁØ ¹ÙÀεù°ú ¿ì¼±¼øÀ§ ·¹º§µé°ú ÇÔ²², ¼ö½Ä ¿¬»êÀÚµéÀÇ Ç¥ÁØ C ÁýÇÕÀ» ÀνÄÇÑ´Ù: { @obeylines@parskip=0pt@parindent=0pt @dag@quad Prefix operators. @ddag@quad See section ÇÒ´ç: ½É¹ú Á¤ÀÇ(Assignment: Defining Symbols). }
¸µÄ¿´Â Ç¥Çö½Äµé¿¡ ´ëÇؼ "°ÔÀ¸¸¥ Æò°¡(lazy evaluation)"¸¦ »ç¿ëÇÑ´Ù; ÀÌ°ÍÀº Àý´ëÀûÀ¸·Î ÇÊ¿äÇÒ ¶§¸¸ Ç¥Çö½ÄÀ» °è»êÇÑ´Ù. ¸µÄ¿´Â ÀÓÀÇÀÇ ¸µÅ©¸¦ Çϱâ À§Çؼ ½ÃÀÛ ÁÖ¼ÒÀÇ °ª°ú ¸Þ¸ð¸® ¿µ¿ªµéÀÇ ±æÀ̸¦ ÇÊ¿ä·Î ÇÑ´Ù; ÀÌ·± °ªµéÀº ¸µÄ¿°¡ ¸í·É ÆÄÀÏÀ» ÀÐÀ» ¶§ °¡´ÉÇÑ ÇÑ »¡¸® °è»êµÈ´Ù. ±×·¯³ª ´Ù¸¥ °ªµé(¿¹¸¦ µé¾î ½É¹ú °ªµé)Àº ÀúÀå¼Ò ÇÒ´ç(stroage allocation)ÀÌ ÀÌ·ç¾îÁö±â Àü±îÁö´Â ¾Ë·ÁÁö°Å³ª ¾Ê°Å³ª ÇÊ¿äÇÏÁö ¾Ê´Ù. ±×·± °ªµéÀº ³ªÁß¿¡ Æò°¡µÈ´Ù. ´Ù¸¥ Á¤º¸(Ãâ·Â ¼½¼ÇµéÀÇ Å©±âµî°ú °°Àº)°¡ ½É¹ú ÇÒ´ç Ç¥Çö½Ä¿¡¼ »ç¿ëµÉ ¼ö ÀÖÀ» ¶§¿¡.
¿©·¯ºÐÀº C ÇÒ´ç ¿¬»êÀÚµé Áß Çϳª¸¦ »ç¿ëÇؼ, ±Û·Î¹ú ½É¹úµéÀ» »ý¼ºÇÒ ¼ö ÀÖ°í ±Û·Î¹ú ½É¹úµé¿¡ °ªµé(ÁÖ¼Òµé)À» ÇÒ´çÇÒ ¼ö ÀÖ´Ù:
symbol = expression ;
symbol &= expression ;
symbol += expression ;
symbol -= expression ;
symbol *= expression ;
symbol /= expression ;
µÎ °³ÀÇ °ÍµéÀÌ ld
Ç¥Çö½Äµé¿¡¼ ´Ù¸¥ ¿¬»êÀÚµéÀ» ±¸ºÐÇÑ´Ù.
ÇÒ´ç ¹®ÀåµéÀº ´ÙÀ½°ú °°ÀÌ º¸ÀÏ ¼ö ÀÖ´Ù:
ld
½ºÅ©¸³Æ®¿¡¼
as commands in their own right in an ld
script; or
SECTIONS
command; or
SECTIONS
command.
ù¹ø° µÎ °æ¿ìµéÀº È¿·Â¸é¿¡¼ µ¿ÀÏÇÏ´Ù--µÑ´Ù Àý´ë ÁÖ¼Ò·Î ½É¹úÀ» Á¤ÀÇÇÑ´Ù. µÎ¹ø° °æ¿ì´Â ÁÖ¼Ò°¡ ƯÁ¤ÇÑ ¼½¼Ç (see section Ãâ·Â ¼½¼Ç ÁöÁ¤(Specifying Output Sections)) ¿¡ »ó´ëÀûÀÎ ½É¹úÀ» Á¤ÀÇÇÑ´Ù.
¸µÄ¿ Ç¥Çö½ÄÀÌ Æò°¡µÇ°í º¯¼ö¿¡ ÇÒ´çµÉ ¶§ ÀÌ°ÍÀº Àý´ë ¶Ç´Â Àç¹èÄ¡ °¡´ÉÇÑ Å¸ÀÔÀ» ¹Þ´Â´Ù. Àý´ë Ç¥Çö½Ä ŸÀÔÀº ½É¹úÀÌ Ãâ·Â ÆÄÀÏ¿¡ ÀÖ°Ô µÉ °ªÀ» °¡Áö´Â ŸÀÔÀÌ´Ù; »ó´ëÀû Ç¥Çö½Ä ŸÀÔÀº °ªÀÌ ¼½¼Ç º£À̽º·ÎºÎÅÍÀÇ °íÁ¤µÈ ¿ÀÇÁ¼ÂÀ¸·Î Ç¥ÇöµÈ´Ù.
Ç¥Çö½ÄÀÇ Å¸ÀÔÀº ½ºÅ©¸³Æ® ÆÄÀÏ¿¡¼ÀÇ À§Ä¡¿¡ ÀÇÇؼ Á¦¾îµÈ´Ù. ¼½¼Ç Á¤ÀÇ
¾È¿¡¼ ÇÒ´çµÈ ½É¹úÀº ¼½¼ÇÀÇ º£À̽º¿¡ »ó´ëÀûÀ¸·Î »ý¼ºµÈ´Ù; ´Ù¸¥ Àå¼Ò¿¡¼
ÇÒ´çµÈ ½É¹úÀº Àý´ëÀûÀÎ ½É¹ú·Î »ý¼ºµÈ´Ù. ¼½¼Ç Á¤ÀǾȿ¡¼ »ý¼ºµÈ ½É¹úÀº
¼½¼ÇÀÇ º£À̽º¿¡ »ó´ëÀûÀ̱⠶§¹®¿¡ Àç¹èÄ¡ °¡´ÉÇÑ Ãâ·ÂÀÌ ¿ä±¸µÇ¸é ÀÌ°ÍÀº
Àç¹èÄ¡ °¡´ÉÇÏ°Ô ³²À» °ÍÀÌ´Ù. ½É¹úÀº Àý´ë ÇÒ´ç ÇÔ¼ö ABSOLUTE
¸¦
»ç¿ëÇÏ¿© ¼½¼Ç Á¤Àdz»¿¡¼ ÇÒ´çµÉ ¶§¿¡µµ, Àý´ë °ªÀ¸·Î »ý¼ºµÉ ¼ö ÀÖ´Ù. ¿¹¸¦
µé¾î¼ ÁÖ¼Ò°¡ .data
À̶ó´Â À̸§ÀÇ Ãâ·Â ¼½¼ÇÀÇ ¸¶Áö¸· ¹ÙÀÌÆ®ÀÎ Àý´ë
½É¹úÀ» »ý¼ºÇϱâ À§Çؼ´Â:
SECTIONS{ ... .data : { *(.data) _edata = ABSOLUTE(.) ; } ... }
¸µÄ¿´Â ¼Ò½º Ç¥Çö½Ä¿¡ ÀÖ´Â ¸ðµç ¿ë¾îµéÀÌ ¾Ë·ÁÁú ¶§±îÁö ÇÒ´çÀÇ Æò°¡¸¦ ²¨µÎ·Á°í(put off) ½ÃµµÇÑ´Ù (see section Æò°¡(Evaluation)). ¿¹¸¦ µé¾î¼ ¼½¼ÇµéÀÇ Å©±â´Â ÇÒ´ç ÀÌÈıîÁö´Â ¾Ë·ÁÁú ¼ö ¾ø´Ù. ±×·¡¼ ÀÌ·± °Í¿¡ Á¾¼ÓÀûÀÎ ÇÒ´çÀº ÇÒ´ç ÀÌÈıîÁö ¼öÇàµÇÁö ¾Ê´Â´Ù. À§Ä¡ Ä«¿îÅÍ dot, `.'¿¡ Á¾¼ÓÀûÀÎ °Í°ú °°Àº ¾î¶² Ç¥Çö½ÄµéÀº ¹Ýµå½Ã ÇÒ´ç µµÁß¿¡ Æò°¡µÇ¾î¾ß ÇÑ´Ù. Ç¥Çö½ÄÀÇ °á°ú°¡ ÇÊ¿äÇÏ´Ù¸é ±×·¯³ª ±× °ªÀÌ »ç¿ë ºÒ°¡´ÉÀ̶ó¸é ¿¡·¯°¡ ¹ß»ýÇÑ´Ù. ¿¹¸¦ µé¾î¼ ´ÙÀ½°ú °°Àº ½ºÅ©¸³Æ®´Â
SECTIONS { ... text 9+this_isnt_constant : { ... } ... }
¿¡·¯ ¸Þ½ÃÁö "Non constant expression for initial address
"¸¦
¹ß»ý½ÃŲ´Ù.
¾î¶² °æ¿ì ¸µÄ¿ ½ºÅ©¸³Æ®°¡ ½É¹úÀÌ ÂüÁ¶µÉ ¶§¸¸, ±×¸®°í ÀÌ°ÍÀÌ ¸µÅ©¿¡
Æ÷ÇÔµÈ ÀÓÀÇÀÇ ¿ÀºêÁ§Æ®¿¡¼µµ Á¤ÀǵÇÁö ¾Ê¾ÒÀ» °æ¿ì¿¡¸¸, ½É¹úÀ» Á¤ÀÇÇÏ´Â
°ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. ¿¹¸¦ µé¾î¼ ÀüÅëÀûÀÎ ¸µÄ¿µéÀº ½É¹ú `etext'¸¦
Á¤ÀÇÇÑ´Ù. ±×·¯³ª ANSI C´Â »ç¿ëÀÚ°¡ `etext'¸¦ ¿¡·¯ ¾øÀÌ
ÇÔ¼ö·Î½á »ç¿ëÇÒ ¼ö Àֱ⸦ ¿ä±¸ÇÑ´Ù. PROVIDE
Å°¿öµå´Â
`etext'°ú °°Àº ½É¹úÀ», ÀÌ°ÍÀÌ ÂüÁ¶µÇÁö¸¸ Á¤ÀǵÇÁö ¾ÊÀº °æ¿ì¿¡¸¸,
Á¤ÀÇÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¹®¹ýÀº
PROVIDE(symbol = expression)
ÀÌ´Ù.
¸í·É ¾ð¾î´Â ¸µÅ© ½ºÅ©¸³Æ® Ç¥Çö½Äµé ¾È¿¡¼ »ç¿ëµÇ´Â ´Ù¼öÀÇ ³»Àå ÇÔ¼öµéÀ» Æ÷ÇÔÇÑ´Ù.
ABSOLUTE(exp)
ADDR(section)
symbol_1
¿Í symbol_2
´Â µ¿ÀÏÇÑ °ªµé·Î ÇÒ´çµÈ °ÍÀÌ´Ù:
SECTIONS{ ... .output1 : { start_of_output_1 = ABSOLUTE(.); ... } .output : { symbol_1 = ADDR(.output1); symbol_2 = start_of_output_1; } ... }
LOADADDR(section)
ADDR
¿Í µ¿ÀÏÇÏ´Ù. ±×·¯³ª ÀÌ°ÍÀº
AT
¶ó´Â Å°¿öµå°¡ ¼½¼Ç Á¤ÀÇ¿¡¼ »ç¿ëµÈ´Ù¸é ¼·Î ´Ù¸¦ ¼ö ÀÖ´Ù
(see section ¿É¼ÇÀÎ ¼½¼Ç ¼Ó¼º(Optional Section Attributes)).
ALIGN(exp)
.
)ÀÇ °á°ú¸¦
¸®ÅÏÇÑ´Ù. exp´Â ¹Ýµå½Ã ±×°ÍÀÇ °ªÀÌ 2ÀÇ ¸îÁ¦°öÀΠǥÇö½ÄÀ̾î¾ß ÇÑ´Ù.
ÀÌ°ÍÀº
(. + exp - 1) & ~(exp - 1)°ú µ¿ÀÏÇÏ´Ù.
ALIGN
Àº À§Ä¡ Ä«¿îÅÍÀÇ °ªÀ» º¯°æÇÏÁö ¾Ê´Â´Ù---ÀÌ°ÍÀº ´ÜÁö ±×°Í¿¡
´ëÇؼ »ê¼ú¿¬»ê¸¸À» ¼öÇàÇÑ´Ù. ¿¹¸¦ µé¾î¼ Ãâ·Â .data
¼½¼ÇÀ» Á÷Àü
¼½¼Ç µÚÀÇ ´ÙÀ½ 0x2000
¹ÙÀÌÆ® °æ°è¿¡ Á¤·ÄÇϱâ À§Çؼ, ±×¸®°í ±×
¼½¼Ç¿¡ ÀÖ´Â ¾î¶² º¯¼ö¸¦ ÀÔ·Â ¼½¼Çµé µÚÀÇ ´ÙÀ½ 0x8000
°æ°è¿¡
Á¤·ÄÇϱâ À§Çؼ´Â:
SECTIONS{ ... .data ALIGN(0x2000): { *(.data) variable = ALIGN(0x8000); } ... }¿¹Á¦ÀÇ
ALIGN
ù¹ø° »ç¿ëÀº ¾î¶² ¼½¼ÇÀÇ À§Ä¡¸¦ ÁöÁ¤ÇÑ´Ù. ¿Ö³Ä¸é
ÀÌ°ÍÀº ¼½¼Ç Á¤ÀÇÀÇ ¿É¼ÇÀÎ start ¼Ó¼ºÀ¸·Î½á »ç¿ëµÇ¾ú±â ¶§¹®ÀÌ´Ù
(see section ¿É¼ÇÀÎ ¼½¼Ç ¼Ó¼º(Optional Section Attributes)). µÎ¹ø° »ç¿ëÀº ´Ü¼øÇÏ°Ô ¾î¶² º¯¼öÀÇ °ªÀ»
Á¤ÀÇÇÑ´Ù.
³»Àå NEXT
´Â ALIGN
¿¡ ¾ÆÁÖ ¹ÐÁ¢ÇÏ°Ô ¿¬°áµÇ¾î ÀÖ´Ù.
DEFINED(symbol)
begin
¸¦ .text
¼½¼Ç¿¡ Àִ ù¹ø° À§Ä¡¿¡
¼³Á¤ÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù---±×·¯³ª begin
À̶ó°í ºÒ¸®´Â ¾î¶² ½É¹úÀÌ
ÀÌ¹Ì Á¸ÀçÇÑ´Ù¸é ±× °ªÀº º¸Á¸µÈ´Ù:
SECTIONS{ ... .text : { begin = DEFINED(begin) ? begin : . ; ... } ... }
NEXT(exp)
ALIGN(exp)
¿¡ ¹ÐÁ¢ÇÏ°Ô ¿¬°áµÇ¾î ÀÖ´Ù; ¿©·¯ºÐÀÌ
ºñ¿¬¼Ó(discontinuous) ¸Þ¸ð¸®¸¦ Ãâ·Â ÆÄÀÏÀ» À§ÇØ Á¤ÀÇÇϱâ À§Çؼ
MEMORY
¸í·ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é µÎ ÇÔ¼öµéÀº ¼·Î µ¿ÀÏÇÏ´Ù.
SIZEOF(section)
symbol_1
°ú
symbol_2
´Â µ¿ÀÏÇÑ °ªµé·Î ÇÒ´çµÈ´Ù:
SECTIONS{ ... .output { .start = . ; ... .end = . ; } symbol_1 = .end - .start ; symbol_2 = SIZEOF(.output); ... }
SIZEOF_HEADERS
sizeof_headers
MAX(exp1, exp2)
MIN(exp1, exp2)
¼¼¹ÌÄÝ·Ð (";")Àº ´ÙÀ½°ú °°Àº Àå¼Ò¿¡¼ ÇÊ¿äÇÏ´Ù. ¸ðµç ´Ù¸¥ Àå¼Ò¿¡¼ ±×µéÀº ½É¹ÌÀû ÀÌÀ¯(aesthetic reasons)·Î ³ªÅ¸³¯ ¼ö ÀÖÁö¸¸ ±×·¸Áö ¾Ê´Ù¸é ¹«½ÃµÈ´Ù.
Assignment
PHDRS
PHDRS
¹®ÀåÀÇ ¸¶Áö¸·¿¡ ³ªÅ¸³ª¾ß ÇÑ´Ù.
See section ELF ÇÁ·Î±×·¥ Çì´õ(ELF Program Headers)
¸µÄ¿ÀÇ µðÆúÆ® ¼³Á¤Àº ¸ðµç »ç¿ë °¡´ÉÇÑ ¸Þ¸ð¸®ÀÇ ÇÒ´çÀ» Çã¿ëÇÑ´Ù. ¿©·¯ºÐÀº
ÀÌ ¼³Á¤À» MEMORY
¸í·ÉÀ» »ç¿ëÇؼ ¿À¹ö¶óÀ̵åÇÒ ¼ö ÀÖ´Ù.
MEMORY
¸í·ÉÀº Ÿ°Ù³»ÀÇ ¸Þ¸ð¸® ºí·°µéÀÇ Å©±â¿Í À§Ä¡¸¦ ±â¼úÇÑ´Ù.
ÀÌ°ÍÀ» ÁÖÀDZí°Ô »ç¿ëÇÔÀ¸·Î½á ¿©·¯ºÐÀº ¾î¶² ¸Þ¸ð¸® ¿µ¿ªµéÀÌ ¸µÄ¿¿¡ ÀÇÇؼ
»ç¿ëµÉ ¼ö ÀÖ´ÂÁö ±×¸®°í ¾î¶² ¸Þ¸ð¸® ¿µ¿ªµéÀ» ¹Ýµå½Ã ÇÇÇØ¾ß ÇÏ´ÂÁö ±â¼úÇÒ
¼ö ÀÖ´Ù. ¸µÄ¿´Â »ç¿ë°¡´ÉÇÑ ¿µ¿ªµé¿¡ ¸ÂÃß±â À§Çؼ ¼½¼ÇµéÀ» ¼·Î ¼¯Áö
¾ÊÁö¸¸ ¿ä±¸µÈ ¼½¼ÇµéÀ» Á¤È®ÇÑ ¿µ¿ªµé·Î À̵¿½ÃÅ°±â´Â ÇÑ´Ù. ±×¸®°í ±×
¿µ¿ªµéÀÌ °¡µæ Â÷°Ô µÇ¸é ¿¡·¯µéÀ» ¹ß»ýÇÑ´Ù.
¸í·É ÆÄÀÏÀº ¸¹¾Æ¾ß ÇÑ ¹ø MEMORY
¸í·ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù; ±×·¯³ª
¿©·¯ºÐÀº ¿øÇÏ´Â ¸¸Å ±× ¾È¿¡ ÀÖ´Â ¸Þ¸ð¸® ºí·°µéÀ» Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ¹®¹ýÀº
´ÙÀ½°ú °°´Ù:
MEMORY { name (attr) : ORIGIN = origin, LENGTH = len ... }
name
(attr)
ALIRWX
" ¹®ÀÚµé·Î ±¸¼ºµÇ¾î¾ß
ÇÑ´Ù. ¼Ó¼º ¸®½ºÆ®¸¦ »ý·«ÇÏ¸é ¿©·¯ºÐÀº ÀÌ°ÍÀ» µÑ·¯½Î´Â °ýÈ£µéµµ »ý·«ÇÒ ¼ö
ÀÖ´Ù. ÇöÀç Áö¿øµÇ´Â ¼Ó¼ºµéÀº ´ÙÀ½°ú °°´Ù:
Letter
'
Section Attribute
R
'
W
'
X
'
A
'
I
'
L
'
I
¿Í µ¿ÀÏ.
!
'
origin
ORIGIN
´Â org
³ª o
·Î ¾à½Ä Ç¥ÇöµÉ ¼ö ÀÖ´Ù (±×·¯³ª ¿¹¸¦
µé¾î `ORG'Àº ¾Æ´Ï´Ù).
len
LENGTH
´Â
len
³ª l
·Î ¾à½Ä Ç¥ÇöµÉ ¼ö ÀÖ´Ù.
¿¹¸¦ µé¾î¼ ¸Þ¸ð¸®°¡ ÇÒ´ç---Çϳª´Â 0ºÎÅÍ ½ÃÀÛÇؼ 256 KB¸¦, ´Ù¸¥ °ÍÀº
0x40000000
ºÎÅÍ ½ÃÀÛÇؼ 4 MB¸¦--À» À§Çؼ »ç¿ë °¡´ÉÇÑ µÎ
¿µ¿ªµéÀ» »ç¿ëÇÑ´Ù°í ÁöÁ¤ÇÏ·Á°í ÇÑ´Ù°í °¡Á¤ÇÏÀÚ. rom
¸Þ¸ð¸® ¿µ¿ªÀº
Àбâ-Àü¿ëÀ̰ųª Äڵ带 ´ã°í ÀÖ´Â ¸í½ÃÀûÀÎ ¸Þ¸ð¸® ·¹Áö½ºÅÍ ¾øÀÌ ¸ðµç
¼½¼ÇµéÀ» ȹµæÇÒ °ÍÀÌÁö¸¸ ram
¸Þ¸ð¸® ¿µ¿ªÀº ±× ¼½¼ÇµéÀ» ȹµæÇÒ
°ÍÀÌ´Ù.
MEMORY { rom (rx) : ORIGIN = 0, LENGTH = 256K ram (!rx) : org = 0x40000000, l = 4M }
ÀÏ´Ü mem¶ó´Â À̸§ÀÇ ¸Þ¸ð¸® ¿µ¿ªÀ» Á¤ÀÇÇß´Ù¸é, SECTIONS
¸í·É¿¡¼ `>mem'·Î ³¡³ª´Â ¸í·ÉÀ» »ç¿ëÇÔÀ¸·Î½á ƯÁ¤ÇÑ Ãâ·Â
¼½¼ÇÀ» ´Ù¸¥ °÷À¸·Î º¸³¾¼ö ÀÖ´Ù (see section ¿É¼ÇÀÎ ¼½¼Ç ¼Ó¼º(Optional Section Attributes)). ¾î¶² ¿µ¿ª¿¡
º¸³»Á®¼ °áÇÕµÈ Ãâ·Â ¼½¼ÇµéÀÌ ±× ¿µ¿ª¿¡ ´ëÇؼ ³Ê¹« Å©´Ù¸é ¸µÄ¿´Â ¿¡·¯
¸Þ½ÃÁö¸¦ Ãâ·ÂÇÒ °ÍÀÌ´Ù.
SECTIONS
¸í·ÉÀº ¾îµð¿¡ ÀÔ·Â ¼½¼ÇµéÀÌ Ãâ·Â ¼½¼Çµé·Î Á¤È®ÇÏ°Ô ³õÀÏ
°ÍÀΰ¡¿Í Ãâ·Â ÆÄÀÏ¿¡¼ÀÇ ±×µéÀÇ ¼ø¼, ±×¸®°í ±×µéÀÌ ÇÒ´çµÈ Ãâ·Â ¼½¼ÇµéÀÌ
¹«¾ùÀΰ¡¸¦ Á¦¾îÇÑ´Ù.
¿©·¯ºÐÀº ¸¹¾Æ¾ß Çѹø SECTIONS
¸í·ÉÀ» ½ºÅ©¸³Æ® ÆÄÀÏ¿¡¼ »ç¿ëÇÒ ¼ö
ÀÖ´Ù. ±×·¯³ª ±× ¾È¿¡ ¿©·¯ºÐÀÌ ¿øÇÏ´Â ¸¸ÅÀÇ ¹®ÀåµéÀ» ³ÖÀ» ¼ö ÀÖ´Ù.
SECTIONS
¸í·É ¾È¿¡ ÀÖ´Â ¹®ÀåµéÀº ´ÙÀ½°ú °°Àº °Íµé ÁßÀÇ Çϳª°¡ µÉ
¼ö ÀÖ´Ù:
ù¹ø° µÎ ÀÛ¾÷µé---¿£Æ®¸® Æ÷ÀÎÆ®¸¦ Á¤ÀÇÇÏ°í ½É¹úµéÀ» Á¤ÀÇÇÏ´Â °Í---À»
SECTIONS
¸í·É ¹Ù±ù¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù: see section ¿£Æ®¸® Æ÷ÀÎÆ®(The Entry Point) ±×¸®°í
section ÇÒ´ç: ½É¹ú Á¤ÀÇ(Assignment: Defining Symbols). ±×µéÀº ½ºÅ©¸³Æ®¸¦ Àб⠽±µµ·Ï ÇÏ´Â ÆíÀǸ¦ À§Çؼ
¿©±â¿¡ Çã¿ëµÇ¾ú´Ù. ±×·¡¼ ±× ½É¹úµé°ú ¿£Æ®¸® Æ÷ÀÎÆ®´Â ¿©·¯ºÐÀÇ Ãâ·Â-ÆÄÀÏ
·¹À̾ƿôÀÇ ÀÇ¹Ì ÀÖ´Â À§Ä¡µé¿¡¼ Á¤ÀÇµÉ ¼ö ÀÖ´Ù.
SECTIONS
¸í·ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é ¸µÄ¿´Â °¢ ÀÔ·Â ¼½¼ÇÀ» µ¿ÀÏÇÑ
À̸§ÀÇ Ãâ·Â ¼½¼Ç¿¡, ±× ¼½¼ÇµéÀÌ ÀÔ·Â ÆÄÀϵ鿡¼ óÀ½À¸·Î ³ªÅ¸³ ¼ø¼´ë·Î
³õ´Â´Ù. ¸ðµç ÀÔ·Â ¼½¼ÇµéÀÌ Ã¹¹ø° ÆÄÀÏ¿¡ ´Ù ÀÖÀ¸¸é, ¿¹¸¦ µé¾î¼ Ãâ·Â
ÆÄÀÏÀÇ ¼½¼ÇµéÀÇ ¼ø¼´Â ù¹ø° ÀÔ·Â ÆÄÀ̸£ÀÌ ¼ø¼¿Í ÀÏÄ¡ÇÒ °ÍÀÌ´Ù.
SECTIONS
¸í·É¿¡¼ °¡Àå ÀÚÁÖ »ç¿ëµÇ´Â ¹®ÀåÀº
section definitionÀÌ´Ù. ÀÌ°ÍÀº Ãâ·Â ¼½¼ÇÀÇ ¼Ó¼ºµéÀ» ÁöÁ¤ÇÑ´Ù:
ÀÌ°ÍÀÇ À§Ä¡, ÇÒ´ç, ³»¿ë, ä¿ì±â ÆÐÅÏ, ±×¸®°í Ÿ°Ù ¸Þ¸ð¸® ¿µ¿ª. ÀÌ·±
½ºÆåÀÇ ´ëºÎºÐÀº ¿É¼ÇÀÌ´Ù; ¾î¶² ¼½¼Ç Á¤ÀÇ °¡Àå °£´ÜÇÑ ÇüÅ´ ´ÙÀ½°ú °°´Ù
SECTIONS { ... secname : { contents } ... }
secnameÀº Ãâ·Â ¼½¼ÇÀÇ À̸§ÀÌ°í contents´Â °Å±â¿¡ µé¾î°¥ °ÍÀÌ ¹«¾ùÀΰ¡¿¡ ´ëÇÑ ½ºÆåÀÌ´Ù---¿¹¸¦ µé¾î¼ ÀÔ·Â ÆÄÀϵéÀÇ ¸®½ºÆ®³ª ÀÔ·Â ÆÄÀϵéÀÇ ¼½¼Çµé (see section ¼½¼Ç ³õ±â(Section Placement)). secname ÁÖº¯¿¡´Â °ø¹é ¹®ÀÚ°¡ ÀÖ¾î¾ß ÇÑ´Ù. ±×·¸°Ô ¼½¼Ç À̸§ÀÌ ±¸ºÐµÈ´Ù. ´Ù¸¥ °ø¹é¹®ÀÚ´Â ¿É¼ÇÀÌ´Ù. ±×·¯³ª ÄÝ·Ð `:'°ú Áß°ýÈ£ `{}'°¡ ÇÊ¿äÇÏ´Ù.
secname´Â ¹Ýµå½Ã ¿©·¯ºÐÀÇ Ãâ·Â Æ÷¸äÀÇ Á¦¾à Á¶°Ç(constraints)°ú
ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. a.out
¿Í °°ÀÌ Á¦ÇÑµÈ °³¼öÀÇ ¼½¼Çµé¸¸À» Áö¿øÇÏ´Â
Æ÷¸ä¿¡¼ ±× À̸§Àº ¹Ýµå½Ã ±× Æ÷¸ä¿¡ ÀÇÇؼ Áö¿øµÇ´Â À̸§µé(¿¹¸¦ µé¾î¼
a.out
´Â .text
, .data
, ¶Ç´Â .bss
¸¸À»
Çã¿ëÇÑ´Ù) ÁßÀÇ ÇϳªÀ̾î¾ß ÇÑ´Ù. Ãâ·Â Æ÷¸äÀÌ ÀÓÀÇ °³¼öÀÇ ¼½¼ÇµéÀ»
Áö¿øÇÏÁö¸¸ ÀÓÀÇ °³¼ö¸¸ Çã¿ëÇÏ°í À̸§µéÀº ±×·¸Áö ¾Ê´Ù¸é(Oasys¿Í °°Àº
°æ¿ì), À̸§Àº ¹Ýµå½Ã µû¿ÈÇ¥·Î ¹ÀÎ ¼ýÀÚ ¹®ÀÚ¿(quoted numeric
string)À¸·Î Á¦°øµÇ¾î¾ß ÇÑ´Ù. ¼½¼Ç À̸§Àº ÀÓÀÇÀÇ ¹®ÀÚ¿·Î ÀÌ·ç¾îÁú ¼ö
ÀÖÁö¸¸ Ç¥ÁØ ld
½É¹ú À̸§ ¹®¹ý¿¡ ¸ÂÁö ¾Ê´Â À̸§Àº ¹Ýµå½Ã µû¿ÈÇ¥·Î
¹¿©¾ß ÇÑ´Ù.
See section ½É¹ú À̸§(Symbol Names).
Ư¼öÇÑ secnameÀÎ `/DISCARD/'´Â ÀÔ·Â ¼½¼ÇµéÀ» ¹ö¸®´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. `/DISCARD/'¶ó´Â À̸§ÀÇ Ãâ·Â ¼½¼Ç¿¡ ÇÒ´çµÈ ÀÓÀÇÀÇ ¼½¼ÇµéÀº ¸¶Áö¸· ¸µÅ© Ãâ·Â¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â´Ù.
¸µÄ¿´Â ³»¿ëÀ» °¡ÁöÁö ¾Ê´Â Ãâ·Â ¼½¼ÇµéÀ» »ý¼ºÇÏÁö ¾Ê´Â´Ù. ÀÌ°ÍÀº Á¸ÀçÇϰųª Á¸ÀçÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Â ÀÔ·Â ¼½¼ÇµéÀ» ÂüÁ¶ÇÒ ¶§ ÆíÀǸ¦ À§ÇÑ °ÍÀÌ´Ù. ¿¹¸¦ µé¾î¼,
.foo { *(.foo) }
ÀÌ°ÍÀº Àû¾îµµ ÇÑ °³ÀÇ ÀÔ·Â ÆÄÀÏ¿¡ `.foo' ¼½¼ÇÀÌ Á¸ÀçÇÑ´Ù¸é Ãâ·Â ÆÄÀÏ¿¡ `.foo' ¼½¼ÇÀ» »ý¼ºÇÒ »ÓÀÌ´Ù.
¼½¼Ç Á¤ÀÇ¿¡¼ ƯÁ¤ ÀÔ·Â ÆÄÀϵéÀ» ³Ö¾î¼, ƯÁ¤ ÀÔ·Â-ÆÄÀÏ ¼½¼ÇµéÀ» ³Ö¾î¼, ¶Ç´Â ÀÌ µÎ °¡Áö¸¦ ÇÕÇؼ, Ãâ·Â ¼½¼Ç ¼½¼ÇÀÇ ³»¿ë¹°À» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ¿©·¯ºÐÀº ¶ÇÇÑ ÀÌ ¼½¼Ç¿¡ ÀÓÀÇ µ¥ÀÌÅ͸¦ ³õÀ» ¼ö ÀÖ°í ¼½¼Ç ½ÃÀÛ¿¡ »ó´ëÀûÀÎ ½É¹úµéÀ» Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
¼½¼Ç Á¤ÀÇÀÇ contentsÀº ´ÙÀ½°ú °°Àº Á¾·ùÀÇ ¹®Àåµé Áß ÀÓÀÇÀÇ °ÍÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù. °ø¹é ¹®ÀÚ·Î ´Ù¸¥ °Íµé°ú ±¸ºÐµÈ, ´ÜÀÏ ¼½¼Ç Á¤ÀÇ¿¡ À̵é Áß ¿øÇÏ´Â ¸¸Å Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù.
filename
.data : { afile.o bfile.o cfile.o }ÀÌ ¿¹Á¦´Â ´Ù¼öÀÇ ¹®ÀåµéÀÌ ¼½¼Ç Á¤ÀÇ ³»¿ë¹°¾È¿¡ Æ÷Ç﵃ ¼ö ÀÖ´Ù´Â °Íµµ ¿¹½ÃÇÑ´Ù. ¿Ö³Ä¸é °¢ ÆÄÀÏ À̸§ÀÌ ºÐ¸®µÈ ¹®ÀåÀ̱⠶§¹®ÀÌ´Ù.
filename( section )
filename( section , section, ... )
filename( section section ... )
* (section)
* (section, section, ...)
* (section section ...)
ld
¸í·É ¶óÀÎÀ¸·ÎºÎÅÍ ¸ðµç ÆÄÀϵéÀ» ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù:
`*'¸¦ °ýÈ£·Î ¹ÀÎ ÀÔ·Â-ÆÄÀÏ ¼½¼Ç ¸®½ºÆ® ¾Õ¿¡ ƯÁ¤ÇÑ ÆÄÀÏ À̸§ ´ë½Å
»ç¿ëÇÑ´Ù.
ÀÌ¹Ì À̸§À¸·Î ¸í½ÃÀûÀ¸·Î Æ÷ÇÔµÈ ¾î¶² ÆÄÀϵéÀ» °¡Áö°í ÀÖ´Ù¸é `*'Àº
¸ðµç ³²Àº ÆÄÀϵéÀ» ÂüÁ¶ÇÑ´Ù---Ãâ·Â ÆÄÀÏ¿¡ ³õÀÏ À§Ä¡°¡ ¾ÆÁ÷
Á¤ÀǵÇÁö ¾ÊÀº °Íµé.
¿¹¸¦ µé¾î¼ Oasys ÆÄÀϷκÎÅÍ 1
¿¡¼ 4
±îÁö ¼½¼ÇµéÀ»
a.out
ÆÄÀÏÀÇ .text
¼½¼Ç¿¡ º¹»çÇÏ·Á¸é ±×¸®°í 13
°ú
14
¼½¼ÇµéÀ» .data
¼½¼Ç¿¡ º¹»çÇÏ·Á¸é:
SECTIONS { .text :{ *("1" "2" "3" "4") } .data :{ *("13" "14") } }`[ section ... ]'´Â ¸ðµç ÇÒ´çµÇÁö ¾ÊÀº ÀÔ·Â ÆÄÀϵé·ÎºÎÅÍ À̸§ÀÌ ÀÖ´Â ¼½¼ÇµéÀ» ÁöÁ¤Çϱâ À§ÇÑ ´Ù¸¥ ´ë¾ÈÀ¸·Î½á Á¾Á¾ ¹Þ¾Æµé¿©Áø´Ù. ¾î¶² ´Ù¸¥ ¿î¿µ üÁ¦(VMS)´Â ÆÄÀÏ À̸§µé¿¡ °¢°ýÈ£µéÀ» Çã¿ëÇϱ⠶§¹®¿¡ ±× Ç¥±â¹ýÀº ´õÀÌ»ó Áö¿øµÇÁö ¾Ê´Â´Ù.
filename( COMMON )
*( COMMON )
*(COMMON)
Ȧ·Î ¸ðµç ÀÔ·Â ÆÄÀϵé(ÇÒ´çµÇÁö ¾Ê´Â
ÇÑ)·ÎºÎÅÍ ÃʱâȵÇÁö ¾ÊÀº µ¥ÀÌÅ͸¦ ÂüÁ¶ÇÑ´Ù;
filename(COMMON)
´Â ƯÁ¤ÇÑ ÆÄÀϷκÎÅÍ ÃʱâȵÇÁö ¾ÊÀº
µ¥ÀÌÅ͸¦ ÂüÁ¶ÇÑ´Ù. µÑ ´Ù ¾îµð¿¡ ÀÔ·Â-ÆÄÀÏ ¼½¼ÇµéÀ» ³õÀ» °ÍÀΰ¡¸¦
ÁöÁ¤ÇÏ´Â ÀϹÝÀûÀÎ ¸ÞÄ«´ÏÁòµéÀÇ Æ¯º°ÇÑ °æ¿ìµéÀÌ´Ù: ld
´Â ÃʱâȵÇÁö
¾ÊÀº µ¥ÀÌÅ͸¦ ÀÔ·Â ÆÄÀÏÀÇ Æ÷¸ä¿¡ »ó°ü¾øÀÌ COMMON
À̶ó´Â À̸§ÀÇ
ÀÔ·Â-ÆÄÀÏ ¼½¼Ç¾È¿¡ ÀÖ´Â °Íó·³ ÀÌ°ÍÀ» ÂüÁ¶ÇÒ ¼ö ÀÖµµ·Ï Çã¿ëÇÑ´Ù.
ƯÁ¤ ÆÄÀÏÀ̳ª ¼½¼Ç À̸§À» »ç¿ëÇÒ ¼ö ÀÖ´Â ÀÓÀÇÀÇ À§Ä¡¿¡ ¶ÇÇÑ ¿ÍÀϵåÄ«µå ÆÐÅÏÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸µÄ¿´Â À¯´Ð½º ½©ÀÌ ±×·¯ÇÑ °Íó·³ ¿ÍÀϵåÄ«µåµéÀ» ó¸®ÇÑ´Ù. `*' ¹®ÀÚ´Â ÀÓÀÇ °³¼öÀÇ ¹®Àڵ鿡 ´ëÀÀÇÑ´Ù. `?' ¹®ÀÚ´Â ´ÜÀÏ ¹®ÀÚ¿¡ ´ëÀÀÇÑ´Ù. `[chars]' chars Áß ÀÓÀÇÀÇ ¹®ÀÚ ´ÜÀÏ ÀνºÅϽº¿Í ´ëÀÀÇÒ °ÍÀÌ´Ù; `-' ¹®ÀÚ´Â ¹®ÀÚµéÀÇ ¹üÀ§¸¦ ÁöÁ¤ÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. `[a-z]'°¡ ÀÓÀÇÀÇ ¼Ò¹®ÀÚ¿Í ´ëÀÀÇÏ´Â °Íó·³ ¸»ÀÌ´Ù. `\' ¹®ÀÚ´Â ´ÙÀ½ ¹®ÀÚ¸¦ Àοë(quote)ÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù.
ÆÄÀÏ À̸§ÀÌ ¿ÍÀϵåÄ«µå¿Í ´ëÁ¶µÉ ¶§ ¿ÍÀϵåÄ«µå ¹®ÀÚµéÀº `/' ¹®ÀÚ¿Í ºñ±³µÇÁö ¾ÊÀ» °ÍÀÌ´Ù(À¯´Ð½º¿¡¼ µð·ºÅ͸® À̸§µéÀ» ±¸ºÐÇÏ´Â µ¥ »ç¿ëµÇ´Â ¹®ÀÚ). ´ÜÀÏ `*' ¹®ÀÚ·Î ÀÌ·ç¾îÁø ÆÐÅÏÀº ¿¹¿ÜÀÌ´Ù; ÀÌ°ÍÀº Ç×»ó ÀÓÀÇÀÇ ÆÄÀÏ À̸§°ú ÀÏÄ¡µÈ´Ù. ¼½¼Ç À̸§¿¡¼ ¿ÍÀϵåÄ«µå ¹®ÀÚµéÀº `/' ¹®ÀÚ¿Í ºñ±³µÉ °ÍÀÌ´Ù.
¿ÍÀϵåÄ«µåµéÀº ¸í·ÉÇà¿¡¼ ¸í½ÃÀûÀ¸·Î ÁöÁ¤µÈ, ÆÄÀϵ鸸 ã´Â´Ù. ¸µÄ¿´Â ¿ÍÀϵåÄ«µåµéÀ» È®ÀåÇؼ µð·ºÅ͸®µéÀ» °Ë»öÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª ¸µÄ¿ ½ºÅ©¸³Æ® ¾È¿¡¼ ´Ü¼øÇÑ ÆÄÀÏ À̸§À» ÁöÁ¤ÇÑ´Ù¸é---¿ÍÀϵåÄ«µå¸¦ ÀüÇô °¡ÁöÁö ¾Ê´Â À̸§--- ±×¸®°í ±× ÆÄÀÏ À̸§ÀÌ ¶ÇÇÑ ¸í·ÉÇà¿¡¼ ÁöÁ¤µÇÁö ¾Ê¾Ò´Ù¸é ¸µÄ¿´Â ±× ÆÄÀÏÀÌ ¸í·ÉÇà¿¡ ³ªÅ¸³ °Íó·³ ±× ÆÄÀÏÀ» ¿·Á°í ½ÃµµÇÒ °ÍÀÌ´Ù.
´ÙÀ½ ¿¹Á¦¿¡¼ ¸í·É ½ºÅ©¸³Æ®´Â Ãâ·Â ÆÄÀÏÀ» ¼¼°³ÀÇ ¿¬¼ÓµÈ ¼½¼Çµé,
.text
, .data
, ±×¸®°í .bss
¾ÈÀ¸·Î Á¤·ÄÇÑ´Ù. À̵é
°¢°¢¿¡ ´ëÇÑ ÀÔ·ÂÀ¸·Î ¸ðµç ÀÔ·Â ÆÄÀϵé Áß¿¡¼ ´ëÀÀµÈ À̸§À» °¡Áø °ÍÀ»
ÃëÇؼ.
SECTIONS { .text : { *(.text) } .data : { *(.data) } .bss : { *(.bss) *(COMMON) } }
´ÙÀ½ ¿¹Á¦´Â all.o
ÆÄÀϷκÎÅÍ ¼½¼Çµé ¸ðµÎ¸¦ ÀÐ¾î¼ ±×µéÀ»
0x10000
À§Ä¡¿¡¼ ½ÃÀÛÇÏ´Â Ãâ·Â ¼½¼Ç outputa
ÀÇ ½ÃÀÛ¿¡
³õ´Â´Ù. foo.o
ÆÄÀϷκÎÅÍ ¿Â .input1
¼½¼Ç ¸ðµÎ´Â µ¿ÀÏÇÑ
Ãâ·Â ¼½¼Ç¿¡¼ Áï°¢ µÚµû¶ó ¿Â´Ù. foo.o
ÀÇ .input2
¼½¼Ç
¸ðµÎ´Â Ãâ·Â ¼½¼Ç outputb
À¸·Î µé¾î°¡°í ¹Ù·Î µÚ¿¡ foo1.o
ÀÇ
.input1
¼½¼ÇÀÌ µÚµû¸¥´Ù. ÀÓÀÇ ÆÄÀÏ¿¡¼ ¿Â ³²Àº .input1
°ú
.input2
¼½¼ÇµéÀº Ãâ·Â ¼½¼Ç outputc
¿¡ ±â·ÏµÈ´Ù.
SECTIONS { outputa 0x10000 : { all.o foo.o (.input1) } outputb : { foo.o (.input2) foo1.o (.input1) } outputc : { *(.input1) *(.input2) } }
ÀÌ ¿¹Á¦´Â ¿ÍÀϵåÄ«µå ÆÐÅϵéÀÌ ÆÄÀϵéÀ» ³ª´©´Â µ¥ ¾î¶»°Ô »ç¿ëµÇ´Â°¡¸¦
º¸¿©ÁØ´Ù. ¸ðµç .text
¼½¼ÇµéÀº .text
¿¡ ³õÀÌ¸ç ¸ðµç
.bss
¼½¼ÇµéÀº .bss
¿¡ ³õÀδÙ. ´ë¹®ÀÚ·Î ½ÃÀÛÇÏ´Â ¸ðµç
ÆÄÀϵ鿡 ´ëÇؼ .data
¼½¼ÇÀº .DATA
¿¡ ³õÀδÙ; ¸ðµç ´Ù¸¥
ÆÄÀϵ鿡 ´ëÇؼ .data
¼½¼ÇÀº .data
¿¡ ³õÀδÙ.
SECTIONS { .text : { *(.text) } .DATA : { [A-Z]*(.data) } .data : { *(.data) } .bss : { *(.bss) } }
µ¥ÀÌÅÍ´Â ÀÔ·Â ÆÄÀϵ鿡¼ °¡Á® ¿Í¼ ¿©·¯ºÐÀÇ Ãâ·Â ÆÄÀÏ¿¡ ¾Õ¿¡¼
¸»ÇÑ(foregoing) ¹®ÀåµéÀÌ Á¤·ÄÇÑ´Ù. µ¥ÀÌÅ͸¦ Á÷Á¢ ¸µÅ© ¸í·É
½ºÅ©¸³Æ®·ÎºÎÅÍ Ãâ·Â ¼½¼Ç¿¡ ³õ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÀÌ·± Ãß°¡ÀÇ ¹®Àåµé
´ëºÎºÐÀÌ Ç¥Çö½ÄµéÀ» Æ÷ÇÔÇÑ´Ù (see section Expressions). ºñ·Ï ÀÌ·± ¹®ÀåµéÀÌ
º¸¿©ÁÖ±â ÆíÇÏ°Ô ºÐ¸®µÇ¾î ³ªÅ¸³ª ÀÖÁö¸¸ ±×·± ºÐ¸®´Â SECTIONS
¸í·ÉÀÇ ¼½¼Ç Á¤ÀǾȿ¡¼ ÀüÇô ºÒÇÊ¿äÇÏ´Ù; ¿©·¯ºÐÀº ¿ì¸®°¡ ¹æ±Ý ±â¼úÇÑ
¹®Àåµé Áß¿¡¼ ¾î¶² °Íµµ ÀÚÀ¯·ÎÀÌ ¼·Î ¼¯À» ¼ö ÀÖ´Ù.
CREATE_OBJECT_SYMBOLS
a.out
ÆÄÀϵéÀÇ °æ¿ì °¢ ÀÔ·Â ÆÄÀÏ¿¡ ´ëÇÑ ½É¹úÀ» °¡Áö´Â °ÍÀÌ
ÆíÇÏ´Ù. ¿©·¯ºÐÀº ÀÌ°ÍÀ», Ãâ·Â ¼½¼Ç .text
¸¦ ´ÙÀ½°ú °°ÀÌ
Á¤ÀÇÇÔÀ¸·Î½á, ¼ºÃëÇÒ ¼ö ÀÖ´Ù:
SECTIONS { .text 0x2020 : { CREATE_OBJECT_SYMBOLS *(.text) _etext = ALIGN(0x2000); } ... }
sample.ld
°¡ ÀÌ ½ºÅ©¸³Æ®¸¦ Æ÷ÇÔÇÑ ÆÄÀÏÀ̶ó¸é, a.o
,
b.o
, c.o
, ±×¸®°í d.o
´Â ´ÙÀ½°ú °°Àº ³»¿ëÀ» °¡Áø ³×
°³ÀÇ ÀÔ·Â ÆÄÀϵéÀ̶ó¸é---
/* a.c */ afunction() { } int adata=1; int abss;`ld -M -T sample.ld a.o b.o c.o d.o' ´Â ´ÙÀ½°ú °°ÀÌ ¿ÀºêÁ§Æ® ÆÄÀÏ À̸§µé°ú ÀÏÄ¡ÇÏ´Â ½É¹úµéÀ» °¡Áö´Â ¸Ê ÆÄÀÏÀ» »ý¼ºÇÒ °ÍÀÌ´Ù:
00000000 A __DYNAMIC 00004020 B _abss 00004000 D _adata 00002020 T _afunction 00004024 B _bbss 00004008 D _bdata 00002038 T _bfunction 00004028 B _cbss 00004010 D _cdata 00002050 T _cfunction 0000402c B _dbss 00004018 D _ddata 00002068 T _dfunction 00004020 D _edata 00004030 B _end 00004000 T _etext 00002020 t a.o 00002038 t b.o 00002050 t c.o 00002068 t d.o
symbol = expression ;
symbol f= expression ;
&= += -= *= /=
¿¬»êÀÚµé ÁßÀÇ ÀÓÀÇÀÇ °ÍÀ»
°¡¸®Å²´Ù.
ƯÁ¤ ¼½¼Ç Á¤ÀÇ ¾È¿¡¼ ½É¹ú¿¡ °ªÀ» ÇÒ´çÇÒ ¶§ ±× °ªÀº ¼½¼ÇÀÇ ½ÃÀÛ¿¡
»ó´ëÀûÀÌ´Ù (see section ÇÒ´ç: ½É¹ú Á¤ÀÇ(Assignment: Defining Symbols)). ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÏ¿´´Ù¸é
SECTIONS { abs = 14 ; ... .data : { ... rel = 14 ; ... } abs2 = 14 + ADDR(.data); ... }
abs
¿Í rel
´Â µ¿ÀÏÇÑ °ªÀ» °¡ÁöÁö ¾Ê´Â´Ù; rel
´Â
abs2
¿Í µ¿ÀÏÇÑ °ªÀ» °¡Áø´Ù.
BYTE(expression)
SHORT(expression)
LONG(expression)
QUAD(expression)
SQUAD(expression)
QUAD
¿Í SQUAD
´Â
µ¿ÀÏÇÏ´Ù. È£½ºÆ®¿Í Ÿ°ÙÀÌ µÑ ´Ù 32ºñÆ®À̶ó¸é QUAD
´Â unsigned 32
ºñÆ® °ªÀ» »ç¿ëÇÏ°í SQUAD
±âÈ£´Â ±× °ªÀ» È®ÀåÇÑ´Ù. µÑ ´Ù ±× °ª¤·¤©
ÀÛ¼ºÇÒ ¶§ Á¤È®ÇÑ endianness¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù.
¸ÖƼ-¹ÙÀÌÆ® °ªµéÀº ¹ÙÀÌÆ® ¼ø¼°¡ Ãâ·Â ÆÄÀÏ Æ÷¸ä¿¡ ÀûÀýÇÏ´Ù¸é ¹«¾ùÀÌµç ±×
¹ÙÀÌÆ® ¼ø¼·Î Ç¥ÇöµÈ´Ù (see section BFD).
FILL(expression)
FILL
¹®ÀåÀº ¼½¼Ç Á¤ÀÇ¿¡ ÀÖ´Â À§Ä¡
µÚ¿¡ ¸Þ¸ð¸® À§Ä¡µéÀ» Ä¿¹öÇÑ´Ù; ÇÑ °³ ÀÌ»óÀÇ FILL
¹®ÀåÀ»
Æ÷ÇÔÇÔÀ¸·Î½á Ãâ·Â ¼½¼ÇÀÇ ¼·Î ´Ù¸¥ ºÎºÐµéÀ» ÆÐÅϵé·Î ä¿ï ¼ö ÀÖ´Ù.
´ÙÀ½Àº ¸ðµç ¿É¼ÇÀÎ ºÎºÐµéÀ» Æ÷ÇÔÇÑ, ¼½¼Ç Á¤ÀÇÀÇ ¿ÏÀüÇÑ ¹®¹ýÀÌ´Ù:
SECTIONS { ... secname start BLOCK(align) (NOLOAD) : AT ( ldadr ) { contents } >region :phdr =fill ... }
secname°ú contentsÀÌ ÇÊ¿äÇÏ´Ù. contents¿¡ ´ëÇؼ´Â
See section ¼½¼Ç Á¤ÀÇ(Section Definitions), ±×¸®°í section ¼½¼Ç ³õ±â(Section Placement). ³²Àº
¿ä¼Òµé---start, BLOCK(align)
, (NOLOAD)
,
AT ( ldadr )
, >region
, :phdr
,
±×¸®°í =fill
---Àº ¸ðµÎ ¿É¼ÇÀÌ´Ù.
start
0x40000000
¿¡ »ý¼ºÇÑ´Ù:
SECTIONS { ... output 0x40000000: { ... } ... }
BLOCK(align)
.
¸¦ ¼½¼Ç ½ÃÀÛÁ¡º¸´Ù ¾Õ¼°Ô ÇÏ¿© ±× ¼½¼ÇÀÌ ÁöÁ¤µÈ
Á¤·Ä¿¡¼ ½ÃÀÛÇϵµ·Ï ÇÏ´Â BLOCK()
½ºÆåÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù.
align´Â Ç¥ÇöÈøÀÌ´Ù.
(NOLOAD)
ROM
¼½¼ÇÀº ¸Þ¸ð¸® À§Ä¡ `0'¿¡ À§Ä¡ÇÏ°í ÇÁ·Î±×·¥ÀÌ
½ÇÇàÇÒ ¶§´Â ·ÎµåµÇÁö ¾Ê¾Æ¾ß ÇÑ´Ù. ROM
¼½¼ÇÀÇ ³»¿ë¹°µéÀº ¸µÄ¿ Ãâ·Â
ÆÄÀÏ¿¡¼ ÀϹÝÀûÀÎ °æ¿ì¿Í °°ÀÌ ³ªÅ¸³¯ °ÍÀÌ´Ù.
SECTIONS { ROM 0 (NOLOAD) : { ... } ... }
AT ( ldadr )
AT
Å°¿öµå µÚ¿¡ µû¶ó ¿À´Â Ç¥Çö½Ä ldadr´Â ±× ¼½¼ÇÀÇ ·Îµå
ÁÖ¼Ò¸¦ ÁöÁ¤ÇÑ´Ù. µðÆúÆ®(AT
Å°¿öµå¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é)´Â À§Ä¡
ÀçÁöÁ¤ ÁÖ¼Ò¿Í µ¿ÀÏÇÏ´Ù. ÀÌ ±â´ÉÀº ROM À̹ÌÁö¸¦ ºôµåÇϱ⠽±µµ·Ï °í¾ÈµÈ
°ÍÀÌ´Ù. ¿¹¸¦ µé¾î¼ ÀÌ SECTIONS
Á¤ÀÇ´Â µÎ°¡Áö Ãâ·Â ¼½¼ÇµéÀ»
»ý¼ºÇÑ´Ù: Çϳª´Â `.text'¶ó°í ºÒ¸®´Â °ÍÀ̸ç ÀÌ°ÍÀº 0x1000
¿¡¼
½ÃÀÛÇÑ´Ù. ±×¸®°í ´Ù¸¥ Çϳª´Â `.mdata'¶ó°í ºÒ¸®´Â °ÍÀ̸ç ÀÌ°ÍÀÇ À§Ä¡
ÀçÁöÁ¤ ÁÖ¼Ò°¡ 0x2000
ÀÏÁö¶óµµ `.text' ¼½¼ÇÀÇ ³¡¿¡ ·ÎµåµÈ´Ù.
½É¹ú _data
Àº code{0x2000} °ªÀ¸·Î Á¤ÀǵȴÙ:
SECTIONS { .text 0x1000 : { *(.text) _etext = . ; } .mdata 0x2000 : AT ( ADDR(.text) + SIZEOF ( .text ) ) { _data = . ; *(.data); _edata = . ; } .bss 0x3000 : { _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;} }ÀÌ·± ½ÄÀ¸·Î »ý¼ºµÈ ROM°ú ÇÔ²² »ç¿ëÇϱâ À§Çؼ, ÃʱâÈ µ¥ÀÌÅ͸¦ ROM À̹ÌÁö·ÎºÎÅÍ ÀÌ°ÍÀÇ ½Ç½Ã°£ ÁÖ¼Ò·Î º¹»çÇϱâ À§Çؼ, ½Ç-½Ã°£ ÃʱâÈ ÄÚµå(C ÇÁ·Î±×·¥µéÀÇ °æ¿ì º¸Åë
crt0
)´Â ´ÙÀ½°ú °°ÀÌ ¾î¶² °ÍÀ»
Æ÷ÇÔÇØ¾ß ÇÑ´Ù:
char *src = _etext; char *dst = _data; /* ROM has data at end of text; copy it. */ while (dst < _edata) { *dst++ = *src++; } /* Zero bss */ for (dst = _bstart; dst< _bend; dst++) *dst = 0;
>region
:phdr
:phdr
º¯°æÀÚ¸¦ »ç¿ëÇÏÁö ¾Ê´Â ÇÑ, ¸ðµç ÈļÓ
ÇÒ´çµÈ ¼½¼Çµéµµ °°ÀÌ ÀÌ·± ¼¼±×¸ÕÆ®µé·Î ÇÒ´çµÉ °ÍÀÌ´Ù. ¾î¶² ¼½¼ÇÀÌ ¾î¶²
¼¼±×¸ÕÆ®·Î ÇÒ´çµÇ´Â °ÍÀ» ¸·À¸·Á¸é, º¸ÅëÀº µðÆúÆ®·Î ¾î¶² ¼¼±×¸ÕÆ®¿¡
ÇÒ´çµÉ ¶§, :NONE
¸¦ »ç¿ëÇÏÀÚ.
=fill
=fill
¸¦ ¼½¼Ç Á¤ÀǾȿ¡ Æ÷ÇÔÇÏ´Â °ÍÀº ÃÊÁöÁ¤ÇÏ´Â °ÍÀÌ´Ù.
fill¸¦ ÁöÁ¤Çϱâ À§Çؼ ÀÓÀÇÀÇ Ç¥Çö½ÄÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÇöÀç Ãâ·Â ¼½¼Ç¿¡ ÀÖ´Â ÀÓÀÇÀÇ ÇÒ´çµÇÁö ¾ÊÀº ±¸¸Û(hole)µéÀº, Ãâ·Â ÆÄÀÏ¿¡
±â·ÏµÉ ¶§, ÇÊ¿äÇÏ´Ù¸é ¹Ýº¹Çؼ, ±× °ªÀÇ LSB(least significant bytes)·Î
ä¿öÁú °ÍÀÌ´Ù. ¶ÇÇÑ ¼½¼Ç Á¤ÀÇÀÇ contents¿¡ FILL
¹®ÀåÀ» ½á¼
°ªÀ» ä¿ìµµ·Ï º¯°æÇÒ ¼ö ÀÖ´Ù.
OVERLAY
¸í·ÉÀº ´ÜÀÏ ¸Þ¸ð¸® À̹ÌÁö·Î½á ·ÎµåµÇ¾î¾ß ÇÏÁö¸¸ µ¿ÀÏÇÑ
¸Þ¸ð¸® ÁÖ¼Ò¿¡¼ ½ÇÇàµÇ¾î¾ß ÇÏ´Â ¼½¼ÇÀ» ±â¼úÇÏ´Â ½¬¿î ¹æ¹ýÀ» Á¦°øÇÑ´Ù.
½ÇÇà½Ã¿¡ ¾î¶² Á¾·ùÀÇ ¿À¹ö·¹ÀÌ °ü¸®ÀÚ´Â ¿À¹ö·¹ÀÌµÈ ¼½¼ÇµéÀ» ¿ä±¸µÈ ½Ç½Ã°£
¸Þ¸ð¸® ÁÖ¼Ò·Î ±×¸®°í ÀÌ°ÍÀ¸·ÎºÎÅÍ º¹»çÇÒ °ÍÀÌ´Ù. ¾Æ¸¶ ´Ü¼øÇÏ°Ô ¾îµå·¹½Ì
ºñÆ®µéÀ» Á¶ÀÛÇÔÀ¸·Î½á ±×·¸°Ô ÇÑ´Ù. ÀÌ·± Á¢±ÙÀº, ¿¹¸¦ µé¾î¼ ¸Þ¸ð¸®ÀÇ
¾î¶² ¿µ¿ªÀÌ ´Ù¸¥ °Íº¸´Ù ´õ ºü¸¦ ¶§ À¯¿ëÇÒ ¼ö ÀÖ´Ù.
OVERLAY
¸í·ÉÀº SECTIONS
¸í·É¿¡¼ »ç¿ëµÈ´Ù. ÀÌ°ÍÀº ´ÙÀ½Ã³·³
º¸ÀδÙ:
OVERLAY start : [ NOCROSSREFS ] AT ( ldaddr ) { secname1 { contents } :phdr =fill secname2 { contents } :phdr =fill ... } >region :phdr =fill
¸ðµç °ÍÀº OVERLAY
(Å°¿öµå) ¸¦ Á¦¿ÜÇÏ°í ¿É¼ÇÀÌ°í °¢ ¼½¼ÇÀº ¹Ýµå½Ã
À̸§ (À§¿¡¼ secname1¿Í secname2) À» °¡Á®¾ß ÇÑ´Ù.
OVERLAY
±¸Á¶¾ÈÀÇ ¼½¼Ç Á¤ÀǵéÀº ÀϹÝÀûÀÎ SECTIONS
±¸Á¶¾ÈÀÇ
±×°Íµé°ú µ¿ÀÏÇÏ´Ù (see section Ãâ·Â ¼½¼Ç ÁöÁ¤(Specifying Output Sections)). ´Ü ¾î¶² Áּҵ鵵 ±×¸®°í ¾î¶²
¸Þ¸ð¸® ¿µ¿ªµéµµ OVERLAY
¾È¿¡ ÀÖ´Â ¼½¼Çµé¿¡ ´ëÇؼ Á¤ÀÇµÉ ¼ö ¾ø´Ù´Â
°ÍÀ» Á¦¿ÜÇÏ°í.
¼½¼ÇµéÀº ¸ðµÎ µ¿ÀÏÇÑ ½ÃÀÛ ÁÖ¼Ò·Î Á¤ÀǵȴÙ. ¼½¼ÇµéÀÇ ·Îµù ÁÖ¼ÒµéÀº ±×µéÀÌ
OVERLAY
¿¡ ´ëÇؼ »ç¿ëµÈ ·Îµå ÁÖ¼Ò¿¡¼ ½ÃÀÛÇؼ ¸Þ¸ð¸®¿¡
¿¬¼ÓÀûÀ¸·Î ¹èÄ¡µÇµµ·Ï Á¤·ÄµÈ´Ù(ÀϹÝÀûÀÎ ¼½¼Ç Á¤ÀÇ¿¡¼Ã³·³ ·Îµù ÁÖ¼Ò´Â
¿É¼ÇÀÌ°í µðÆúÆ®´Â ½ÃÀÛ ÁÖ¼ÒÀÌ´Ù; ½ÃÀÛ ÁÖ¼Òµµ ¶ÇÇÑ ¿É¼ÇÀÌ°í µðÆúÆ®´Â
.
ÀÌ´Ù).
NOCROSSREFS
Å°¿öµå°¡ »ç¿ëµÈ´Ù¸é ±×¸®°í ¼½¼Çµé »çÀÌ¿¡ ´Ù¸¥
ÂüÁ¶µéÀÌ ÀÖ´Ù¸é ¸µÄ¿´Â ¿¡·¯¸¦ º¸°íÇÒ °ÍÀÌ´Ù. ¼½¼Çµé ¸ðµÎ°¡ µ¿ÀÏÇÑ
ÁÖ¼Ò¿¡¼ ½ÇÇàµÇ±â ¶§¹®¿¡ ÇϳªÀÇ ¼½¼ÇÀÌ ´Ù¸¥ °ÍÀ» Á÷Á¢ ÂüÁ¶ÇÏ´Â °ÍÀº
ÀϹÝÀûÀ¸·Î Àǹ̰¡ ¾ø´Ù. See section ¿É¼Ç ¸í·É(Option Commands).
OVERLAY
¿¡ ÀÖ´Â °¢ ¼½¼Ç¿¡ ´ëÇؼ ¸µÄ¿´Â ÀÚµ¿À¸·Î µÎ °³ÀÇ ½É¹úµéÀ»
Á¤ÀÇÇÑ´Ù. ½É¹ú __load_start_secname
´Â ±× ¼½¼ÇÀÇ ½ÃÀÛ ·Îµå
Áּҷνá Á¤ÀǵȴÙ. ½É¹ú __load_stop_secname
´Â ±× ¼½¼ÇÀÇ
¸¶Áö¸· ·Îµå Áּҷνá Á¤ÀǵȴÙ. secname¾È¿¡ ÀÖ´Â C identifierµé
¾È¿¡¼´Â À¯È¿ÇÏÁö ¾Ê´Â, ÀÓÀÇÀÇ ¹®ÀÚµéÀº ¸ðµÎ Á¦°ÅµÈ´Ù. C (¶Ç´Â ¾î¼Àºí·¯)
ÄÚµå´Â ÀÌ·± ½É¹úµéÀ» ÇÊ¿äÇÑ ´ë·Î ¿À¹ö·¹ÀÌµÈ ¼½¼ÇµéÀ» À̵¿ÇÏ´Â µ¥ »ç¿ëÇÒ
¼ö ÀÖ´Ù.
¿À¹ö·¹ÀÌ ¸¶Áö¸·¿¡¼ .
ÀÇ °ªÀº ¿À¹ö·¹ÀÌÀÇ ½ÃÀÛ ÁÖ¼Ò¿¡ °¡Àå Å«
¼½¼ÇÀÇ Å©±â¸¦ ´õÇÑ °ÍÀ¸·Î ¼³Á¤µÈ´Ù.
´ÙÀ½Àº ¿¹Á¦ÀÌ´Ù. ÀÌ°ÍÀº SECTIONS
±¸Á¶¾È¿¡¼ ³ªÅ¸³¯ °ÍÀÌ´Ù¶ó´Â
°ÍÀ» ±â¾ïÇÏÀÚ.
OVERLAY 0x1000 : AT (0x4000) { .text0 { o1/*.o(.text) } .text1 { o2/*.o(.text) } }
ÀÌ°ÍÀº .text0
¿Í .text1
µÑ´Ù 0x1000 ÁÖ¼Ò¿¡¼ ½ÃÀÛÇϵµ·Ï
Á¤ÀÇÇÒ °ÍÀÌ´Ù. .text0
´Â ÁÖ¼Ò 0x4000¿¡ ·ÎµåµÉ °ÍÀÌ°í
.text1
´Â .text0
¹Ù·Î µÚ·Î ·ÎµåµÉ °ÍÀÌ´Ù. ´ÙÀ½ ±âÈ£µéÀÌ
Á¤ÀÇµÉ °ÍÀÌ´Ù: __load_start_text0
, __load_stop_text0
,
__load_start_text1
, __load_stop_text1
.
¿À¹ö·¹ÀÌ .text1
¸¦ ¿À¹ö·¹ÀÌ ¿µ¿ª¾ÈÀ¸·Î º¹»çÇÏ´Â C ÄÚµå´Â ´ÙÀ½°ú
°°ÀÌ º¸ÀÏ ¼ö ÀÖ´Ù.
extern char __load_start_text1, __load_stop_text1; memcpy ((char *) 0x1000, &__load_start_text1, &__load_stop_text1 - &__load_start_text1);
OVERLAY
¸í·ÉÀº ´ÜÁö ¹®¹ýÀûÀÎ ¼³ÅÁ(sugar)ÀÌ´Ù. ¿Ö³Ä¸é ÀÌ°ÍÀÌ ÇÏ´Â
¸ðµç ÀϵéÀÌ Á» ´õ ±âº»ÀûÀÎ ¸í·ÉµéÀ» »ç¿ë¤¾¼ ÀÌ·ç¾îÁú ¼ö Àֱ⠶§¹®ÀÌ´Ù.
À§ÀÇ ¿¹´Â ´ÙÀ½°ú °°Àº °ÍÀ¸·Î µ¿ÀÏÇÏ°Ô ÀÛ¼ºµÉ ¼ö ÀÖ´Ù.
.text0 0x1000 : AT (0x4000) { o1/*.o(.text) } __load_start_text0 = LOADADDR (.text0); __load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0); .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) { o2/*.o(.text) } __load_start_text1 = LOADADDR (.text1); __load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1); . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1));
ELF ¿ÀºêÁ§Æ® ÆÄÀÏ Æ÷¸äÀº ÇÁ·Î±×·¥ Çì´õ(program headers) ¸¦
»ç¿ëÇÑ´Ù. ÀÌ°ÍÀº ½Ã½ºÅÛ ·Î´õ¿¡ ÀÇÇؼ ÀÐÈ÷°í, ÇÁ·Î±×·¥ÀÌ ¸Þ¸ð¸®·Î
ÀûÀçµÇ´Â ¹æ¹ýÀ» ±â¼úÇÑ´Ù. ÇÁ·Î±×·¥ Çì´õ´Â ÇÁ·Î±×·¥À» ELF ½Ã½ºÅÛ¿¡¼
½ÇÇàÇÒ ¼ö ÀÖµµ·Ï Á¤È®ÇÏ°Ô ¼³Á¤µÇ¾î¾ß ÇÑ´Ù. ¸µÄ¿´Â Ÿ´çÇÑ ÇÁ·Î±×·¥
Çì´õµéÀ» µðÆúÆ®·Î »ý¼ºÇÒ °ÍÀÌ´Ù. ±×·¯³ª ¾î¶² °æ¿ì¿¡´Â ±× ÇÁ·Î±×·¥
Çì´õµéÀ» Á» ´õ ÀÚ¼¼ÇÏ°Ô ¸í½ÃÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù; PHDRS
¸í·ÉÀº
ÀÌ·± ¸ñÀûÀ¸·Î »ç¿ëµÉ ¼ö ÀÖ´Ù. PHDRS
¸í·ÉÀÌ »ç¿ëµÇ¸é ¸µÄ¿´Â ¾î¶²
ÇÁ·Î±×·¥ Çì´õµéµµ ½º½º·Î »ý¼ºÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.
PHDRS
¸í·ÉÀº ´ÜÁö ELF Ãâ·Â ÆÄÀÏÀ» »ý¼ºÇÒ ¶§¸¸ Àǹ̰¡ ÀÖ´Ù. ÀÌ°ÍÀº
´Ù¸¥ °æ¿ì¿¡´Â ¹«½ÃµÈ´Ù. ÀÌ ¸Å´º¾óÀº ½Ã½ºÅÛ ·Î´õ°¡ ÇÁ·Î±×·¥ Çì´õµéÀ»
Çؼ®ÇÏ´Â ÀÚ¼¼ÇÑ »çÇ×µéÀ» ±â¼úÇÑ´Ù; Á» ´õ ÀÚ¼¼ÇÑ Á¤º¸µéÀ» º¸·Á¸é ELF
ABI¸¦ º¸ÀÚ. ELF ÆÄÀÏÀÇ ÇÁ·Î±×·¥ Çì´õµéÀº objdump
¸í·ÉÀÇ `-p'
¿É¼ÇÀ» »ç¿ëÇؼ µð½ºÇ÷¹ÀÌµÉ ¼ö ÀÖ´Ù.
´ÙÀ½Àº PHDRS
¸í·ÉÀÇ ¹®¹ýÀÌ´Ù. PHDRS
, FILEHDR
,
AT
, ±×¸®°í FLAGS
´Ü¾îµéÀº Å°¿öµåµéÀÌ´Ù.
PHDRS { name type [ FILEHDR ] [ PHDRS ] [ AT ( address ) ] [ FLAGS ( flags ) ] ; }
name´Â ¸µÄ¿ ½ºÅ©¸³Æ®ÀÇ SECTIONS
¸í·É¿¡¼ ÂüÁ¶¸¦ À§Çؼ¸¸
»ç¿ëµÈ´Ù. ÀÌ°ÍÀº Ãâ·Â ÆÄÀÏ¿¡ µé¾î°¡Áö ¾Ê´Â´Ù.
¾î¶² ÇÁ·Î±×·¥ Çì´õ ŸÀÔµéÀº ÆÄÀϷκÎÅÍ ½Ã½ºÅÛ ·Î´õ¿¡ ÀÇÇؼ ·ÎµåµÇ´Â
¸Þ¸ð¸® ¼¼±×¸ÕÆ®µéÀ» ±â¼úÇÑ´Ù. ¸µÄ¿ ½ºÅ©¸³Æ®¿¡¼ ÀÌ·± ¼¼±×¸ÕÆ®µéÀÇ
³»¿ë¹°Àº ÇÒ´çµÈ Ãâ·Â ¼½¼ÇµéÀÌ ±× ¼¼±×¸ÕÆ® ¾È¿¡ µé¾î°¡µµ·Ï(¿ªÀÚÁÖ:
¸®´ÙÀÌ·ºÆ®) ÇÔÀ¸·Î½á ÁöÁ¤µÈ´Ù. ÀÌ·¸°Ô Çϱâ À§Çؼ SECTIONS
¸í·É¿¡¼ Ãâ·Â ¼½¼ÇÀ» ±â¼úÇÏ´Â ¸í·ÉÀº `:name'¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
¿©±â¼ `:name'´Â PHDRS
¸í·É¿¡ ³ªÅ¸³ °Í°ú °°ÀÌ
ÇÁ·Î±×·¥ Çì´õÀÇ À̸§ÀÌ´Ù. See section ¿É¼ÇÀÎ ¼½¼Ç ¼Ó¼º(Optional Section Attributes).
¾î¶² ¼½¼ÇµéÀÌ Çϳª ÀÌ»óÀÇ ¼¼±×¸ÕÆ® ¾È¿¡¼ ³ªÅ¸³ª´Â °ÍÀº ÀϹÝÀûÀÌ´Ù. ÀÌ°ÍÀº `:name'¸¦ ¹Ýº¹ÇÔÀ¸·Î½á ÁöÁ¤µÈ´Ù. ¼½¼ÇÀÌ ³ªÅ¸³¯ ÇÁ·Î±×·¥ Çì´õ °¢°¢¿¡ ´ëÇؼ Çѹø¾¿ ÀÌ°ÍÀ» »ç¿ëÇÏ´Â ½ÄÀ¸·Î ¹Ýº¹ÇÑ´Ù.
¾î¶² ¼½¼ÇÀÌ `:name'¸¦ »ç¿ëÇÏ¿© Çϳª ÀÌ»óÀÇ ¼¼±×¸ÕÆ®µé¾È¿¡
³õÀδٸé, `:name'¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀº ¸ðµç ÈÄ¼Ó ÇÒ´çµÈ ¼½¼ÇµéÀº
µ¿ÀÏÇÑ ¼¼±×¸ÕÆ®µé ¾È¿¡ ³õÀδÙ. ÀÌ°ÍÀº ÆíÀǸ¦ À§ÇÑ °ÍÀÌ´Ù. ¿Ö³Ä¸é
ÀϹÝÀûÀ¸·Î ¿¬¼ÓµÈ ¼½¼ÇµéÀÇ Àüü ÁýÇÕÀº ´ÜÀÏ ¼¼±×¸ÕÆ® ¾È¿¡ ³õÀÏ °ÍÀ̱â
¶§¹®ÀÌ´Ù. µðÆúÆ®·Î Çϳª¿¡ ÇÒ´çµÇ´Â °ÍÀÌ °ü·ÊÀÌÁö¸¸, ¾î¶² ¼½¼ÇÀÌ ÇϳªÀÇ
¼¼±×¸ÕÆ®¿¡ ÇÒ´çµÇ´Â °ÍÀ» ¹æÁöÇÏ·Á¸é, :NONE
¸¦ »ç¿ëÇÏÀÚ.
ÇÁ·Î±×·¥ Çì´õ ŸÀÔ µÚ¿¡ ³ªÅ¸³¯ ¼ö ÀÖ´Â FILEHDR
¿Í PHDRS
Å°¿öµåµéÀº ¶ÇÇÑ ¸Þ¸ð¸®ÀÇ ¼¼±×¸ÕÆ® ³»¿ëµéÀ» °¡¸®Å²´Ù. FILEHDR
Å°¿öµå´Â ±× ¼¼±×¸ÕÆ®°¡ ELF ÆÄÀÏ Çì´õ¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.
PHDRS
Å°¿öµå´Â ±× ¼¼±×¸ÕÆ®°¡ ELF ÇÁ·Î±×·¥ Çì´õ ÀڽŵéÀ» Æ÷ÇÔÇؾß
ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.
type´Â ´ÙÀ½°ú °°Àº °Íµé ÁßÀÇ ÇϳªÀÏ ¼ö ÀÖ´Ù. ¼ýÀÚµéÀº Å°¿öµåÀÇ °ªÀ» ³ªÅ¸³½´Ù.
PT_NULL
(0)
PT_LOAD
(1)
PT_DYNAMIC
(2)
PT_INTERP
(3)
PT_NOTE
(4)
PT_SHLIB
(5)
PT_PHDR
(6)
¾î¶² ¼¼±×¸ÕÆ®°¡ ¸Þ¸ð¸®ÀÇ Æ¯Á¤ ÁÖ¼Ò¿¡¼ ·ÎµåµÇ¾î¾ß ÇÑ´Ù´Â °ÍÀ» ÁöÁ¤ÇÏ´Â
°ÍÀº °¡´ÉÇÏ´Ù. ÀÌ°ÍÀº AT
Ç¥Çö½ÄÀ» »ç¿ëÇؼ °¡´ÉÇÏ´Ù. ÀÌ°ÍÀº
SECTIONS
¸í·É¾È¿¡¼ »ç¿ëµÈ AT
¸í·É¿¡ µ¿ÀÏÇÏ´Ù
(see section ¿É¼ÇÀÎ ¼½¼Ç ¼Ó¼º(Optional Section Attributes)). ÇÁ·Î±×·¥ Çì´õ¿¡ AT
¸¦ »ç¿ëÇÏ´Â °ÍÀº
SECTIONS
¸í·É¿¡ ÀÖ´Â ÀÓÀÇÀÇ Á¤º¸¸¦ ¿À¹ö¶óÀ̵åÇÑ´Ù.
ÀϹÝÀûÀ¸·Î ¼¼±×¸ÕÆ® Ç÷¡±×µéÀº ¼½¼Çµé¿¡ ±âÃÊÇؼ ¼³Á¤µÈ´Ù. FLAGS
Å°¿öµå´Â ¸í½ÃÀûÀ¸·Î ¼¼±×¸ÕÆ® Ç÷¡±×µéÀ» ÁöÁ¤Çϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù.
flagsÀÇ °ªÀº Á¤¼öÀ̾î¾ß ÇÑ´Ù. ÀÌ°ÍÀº ÇÁ·Î±×·¥ Çì´õÀÇ
p_flags
¸¦ ÁöÁ¤ÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù.
´ÙÀ½Àº PHDRS
»ç¿ëÀÇ ¿¹ÀÌ´Ù. ÀÌ°ÍÀº ¿ø(native) ELF ½Ã½ºÅÛ¿¡¼
»ç¿ëµÇ´Â ÇÁ·Î±×·¥ Çì´õµéÀÇ ÀüÇüÀûÀÎ ¸ð½ÀÀ» º¸¿©ÁØ´Ù.
PHDRS { headers PT_PHDR PHDRS ; interp PT_INTERP ; text PT_LOAD FILEHDR PHDRS ; data PT_LOAD ; dynamic PT_DYNAMIC ; } SECTIONS { . = SIZEOF_HEADERS; .interp : { *(.interp) } :text :interp .text : { *(.text) } :text .rodata : { *(.rodata) } /* defaults to :text */ ... . = . + 0x1000; /* move to a new page in memory */ .data : { *(.data) } :data .dynamic : { *(.dynamic) } :data :dynamic ... }
¸µÄ¿ ¸í·É ¾ð¾î´Â °á°ú ÆÄÀÏ¿¡¼ ù¹ø°·Î ½ÇÇàµÉ ¸í·É(entry point)À» Á¤ÀÇÇϱâ À§Çؼ Ưº°È÷ °í¾ÈµÈ ¸í·ÉÀ» Æ÷ÇÔÇÑ´Ù. ÀÌ°ÍÀÇ ¸Å°³º¯¼ö´Â ½É¹ú À̸§ÀÌ´Ù:
ENTRY(symbol)
½É¹ú ÇÒ´çó·³, ENTRY
¸í·ÉÀº ¸í·É ÆÄÀÏ ¾È¿¡¼ µ¶¸³ ¸í·ÉÀ¸·Î½á ¶Ç´Â
SECTIONS
¸í·É¾È¿¡ ÀÖ´Â ¼½¼Ç Á¤Àǵé Áß¿¡ ÀÖÀ» ¼ö ÀÖ´Ù---¾î¶²
°ÍÀÌµç ·¹À̾ƿô¿¡ ´ëÇؼ °¡Àå ÀǹÌÀÖÀ¸¸é µÈ´Ù.
ENTRY
´Â ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ¼±ÅÃÇÏ´Â ¿©·¯°¡Áö ¹æ¹ýµé Áß¿¡¼ À¯ÀÏÇÑ
°ÍÀÌ´Ù. ¿©·¯ºÐÀº ÀÌ°ÍÀ» ´ÙÀ½ ¹æ¹ýµé ÁßÀÇ Çϳª·Î ÁöÁ¤ÇÒ ¼ö
ÀÖ´Ù(¿ì¼±¼øÀ§ ³»¸²Â÷¼øÀ¸·Î º¸¿©Áø: ÀÌ ¸®½ºÆ®¿¡¼ Á» ´õ ³ôÀº ¹æ¹ýµéÀº ´õ
¾Æ·¡¿¡ ÀÖ´Â ¹æ¹ýµéÀ» ¿À¹ö¶óÀ̵åÇÑ´Ù).
ENTRY(symbol)
¸í·É:
start
½É¹úÀÇ °ª;
.text
¼½¼ÇÀÇ Ã¹¹ø° ¹ÙÀÌÆ® ÁÖ¼Ò;
0
.
¿¹¸¦ µé¾î¼ ¿©·¯ºÐÀº ÀÌ·± ±ÔÄ¢µéÀ» »ç¿ëÇؼ ÇÒ´ç ¹®Àå ¾È¿¡¼ ¿£Æ®¸®
Æ÷ÀÎÆ®¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù: ÀÔ·Â ÆÄÀÏ ¾È¿¡ start
½É¹úÀÌ Á¤ÀǵÇÁö
¾Ê¾Ò´Ù¸é ÀÌ°Í¿¡ ÀûÀåÇÑ °ªÀ» ÇÒ´çÇÔÀ¸·Î½á Á¤ÀÇÇÒ ¼ö ÀÖ´Ù---
start = 0x2020;
ÀÌ ¿¹Á¦´Â Àý´ë ÁÖ¼Ò¸¦ º¸¿©ÁÖÁö¸¸ ÀÓÀÇÀÇ Ç¥Çö½ÄÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦
µé¾î¼ ¿©·¯ºÐÀÇ ÀÔ·Â ¿ÀºêÁ§Æ® ÆÄÀϵéÀÌ ¿£Æ®¸® Æ÷ÀÎÆ®¿¡ ´ëÇؼ ¾î¶² ´Ù¸¥
½É¹ú-À̸§ °ü·Ê¸¦ »ç¿ëÇÑ´Ù¸é ¿©·¯ºÐÀº start
¿¡ ´ëÇÑ ½ÃÀÛ ÁÖ¼Ò¸¦
´ã°í ÀÖ´Â ½É¹úÀÌ¸é ¹«¾ùÀ̵ç ÀÌ°ÍÀÇ °ªÀ» ÇÒ´çÇÒ ¼ö ÀÖ´Ù:
start = other_symbol ;
¸µÄ¿ ¸í·É ½ºÅ©¸³Æ®´Â Ưº°È÷ ¹öÀü ½ºÅ©¸³Æ®¸¦ ÁöÁ¤Çϱâ À§ÇÑ ¸í·ÉÀ» Æ÷ÇÔÇÏ¸ç °øÀ¯ ¶óÀ̺귯¸®µéÀ» Áö¿øÇÏ´Â ELF Ç÷§Æûµé¿¡¼¸¸ Àǹ̰¡ ÀÖ´Ù. ¹öÀü ½ºÅ©¸³Æ®´Â ¸µÅ©ÇÏ´Â ½Ã°£¿¡ ¸µÄ¿¿¡ ´ëÇÑ ´Ù¸¥ ÀÔ·Â ÆÄÀÏó·³, ¿©·¯ºÐÀÌ »ç¿ëÇÏ´Â ¸µÄ¿ ½ºÅ©¸³Æ®¾È¿¡ Á÷Á¢ ¸¸µé¾î ³Ö¾îÁú ¼ö ÀÖ´Ù. ¸í·É ½ºÅ©¸³Æ® ¹®¹ýÀº ´ÙÀ½°ú °°´Ù:
VERSION { version script contents }
¹öÀü ½ºÅ©¸³Æ®´Â `--version-script' ¸µÄ¿ ¸í·ÉÇà ¿É¼ÇÀ» »ç¿ëÇؼ ¸µÄ¿¿¡°Ô ÁöÁ¤µÉ ¼ö ÀÕµû. ¹öÀü ½ºÅ©¸³Æ®µéÀº °øÀ¯ ¶óÀ̺귯¸®µéÀ» »ý¼ºÇÒ ¶§¸¸ Àǹ̰¡ ÀÖ´Ù.
¹öÀü ½ºÅ©¸³Æ®ÀÇ Æ÷¸äÀº ¼Ö¶ó¸®½º 2.5¿¡¼ SunÀÇ ¸µÄ¿¿¡ ÀÇÇؼ »ç¿ëµÇ´Â ±×°Í°ú µ¿ÀÏÇÏ´Ù. ¹öÀüÀ» ¸Å±â´Â °Í(versioning)Àº À̸§À» °¡Áø ¹öÀü ³ëµåµé Æ®¸®¿Í ¹öÀü ½ºÅ©¸³Æ®¾È¿¡¼ ÁöÁ¤ÇÑ »óÈ£ ÀÇÁ¸¼ºÀ» Á¤ÀÇÇÔÀ¸·Î½á ¼öÇàµÈ´Ù. ¹öÀü ½ºÅ©¸³Æ®´Â ¾î¶² ½É¹úµéÀÌ ¾î¶² ¹öÀü ³ëµå¿¡ ÀÇÁ¸ÇÏ´ÂÁö ÁöÁ¤ÇÒ ¼ö ÀÖ°í ÁöÁ¤µÈ ½É¹ú ÁýÇÕÀ» ·ÎÄà ¹üÀ§·Î Ãà¼ÒÇؼ ±×µéÀÌ °øÀ¯ ¶óÀ̺귯¸® ¿ÜºÎ¿¡¼ ±Û·Î¹úÇÏ°Ô º¸ÀÌÁö ¾Êµµ·Ï ÇÒ ¼ö ÀÖ´Ù.
¹öÀü ½ºÅ©¸³Æ® ¾ð¾îÀÇ µ¥¸ð¸¦ º¸¿©ÁÖ´Â °¡Àå ½¬¿î ¹æ¹ýÀº ´ÙÀ½°ú °°Àº ¸î°¡Áö ¿¹Á¦µéÀ» º¸´Â °ÍÀÌ´Ù.
VERS_1.1 { global: foo1; local: old*; original*; new*; }; VERS_1.2 { foo2; } VERS_1.1; VERS_2.0 { bar1; bar2; } VERS_1.2;
ÀÌ ¿¹Á¦¿¡¼ ¼¼ ¹öÀü ³ëµåµéÀÌ Á¤ÀǵǾî ÀÖ´Ù. `VERS_1.1'Àº Á¤ÀÇµÈ Ã¹¹ø° ¹öÀü ³ëµåÀÌ°í ´Ù¸¥ Á¾¼Ó¹°µéÀ» °¡ÁöÁö ¾Ê´Â´Ù. `foo1'´Â ¹öÀü ³ëµå¿¡ Á¾¼ÓÀûÀÌ°í ¿©·¯ ¿ÀºêÁ§Æ® ÆÄÀϵé¾È¿¡ º¸ÀÌ´Â ¸¹Àº ½É¹úµéÀº ±× ¹üÀ§°¡ ·ÎÄ÷ΠÁÙ¾îµé¾î¼ ±×µéÀº °øÀ¯ ¸Þ¸ð¸® ¹Ù±ù¿¡¼ º¸ÀÌÁö ¾Ê´Â´Ù.
´ÙÀ½À¸·Î `VERS_1.2'°¡ Á¤ÀǵǾî ÀÖ´Ù. ÀÌ°ÍÀº `VERS_1.1'¿¡ Á¾¼ÓÀûÀÌ´Ù. `foo2' ½É¹úÀº ÀÌ ¹öÀü ³ëµå¿¡ Á¾¼ÓÀûÀÌ´Ù.
¸¶Áö¸·À¸·Î `VERS_2.0' ³ëµå°¡ Á¤ÀǵȴÙ. ÀÌ°ÍÀº `VERS_1.2'¿¡ Á¾¼ÓÀûÀÌ´Ù. `bar1'¿Í `bar2' ½É¹úµéÀº ÀÌ ¹öÀü ³ëµå¿¡ Á¾¼ÓÀûÀÌ´Ù.
¾î¶² ¹öÀü ³ëµå¿¡ Á¾¼ÓÀûÀÌÁö ¾Ê´Â, ¶óÀ̺귯¸®³»¿¡¼ Á¤ÀÇµÈ ½É¹úµéÀº ±× ¶óÀ̺귯¸®ÀÇ ÁöÁ¤µÇÁö ¾ÊÀº º£À̽º ¹öÀü¿¡ È¿°úÀûÀ¸·Î Á¾¼ÓÀûÀÌ´Ù. ¸ðµç ±×·¸Áö ¾ÊÀº ÁöÁ¤µÇÁö ¾ÊÀº ½É¹úµéÀ» ¹öÀü ½ºÅ©¸³Æ® ¾îµò°¡¿¡ `global: *'¸¦ »ç¿ëÇÑ ÁÖ¾îÁø ¹öÀü ³ëµå¿¡ Á¾¼ÓÀûÀÌ°Ô ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù.
¾îÈÖÀûÀ¸·Î ¹öÀü ³ëµåµéÀÇ À̸§Àº ±×µéÀÌ ±×°ÍÀ» Àд »ç¶÷¿¡°Ô Á¦½ÃÇÒ ÀÇ¹Ì¿Í ´Ù¸¥ ±¸Ã¼ÀûÀÎ Àǹ̸¦ °¡ÁöÁö ¾Ê´Â´Ù. `2.0' ¹öÀüÀº `1.1'°ú `1.2' »çÀÌ¿¡¼ ³ªÅ¸³¯ ¼öµµ ÀÖ´Ù. ±×·¯³ª ÀÌ°ÍÀº ¹öÀü ½ºÅ©¸³Æ®¸¦ È¥¶õ½º·´°Ô ÀÛ¼ºÇÏ´Â ¹æ¹ýÀÌ µÉ °ÍÀÌ´Ù.
¾îÇø®ÄÉÀ̼ǰú ¹öÀüÀÌ ºÙÀº ½É¹ú(versioned symbol)À» °¡Áö´Â °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸µÅ©ÇÒ ¶§ ¾îÇø®ÄÉÀÌ¼Ç ÀÚ½ÅÀº ÀÌ°ÍÀÌ ÇÊ¿ä·Î ÇÏ´Â °¢ ½É¹úÀÇ ¹öÀüÀÌ ¹«¾ùÀÎÁö¸¦ ¾Ë°í ÀÖÀ¸¸ç, ¸µÅ©ÇÏ´Â °¢ °øÀ¯ ¶óÀ̺귯¸®·ÎºÎÅÍ ÇÊ¿äÇÑ ¹öÀü ³ëµå°¡ ¹«¾ùÀΰ¡µµ ¾Ë°í ÀÖ´Ù. ±×·¡¼ ½ÇÇà½Ã µ¿Àû ·Î´õ´Â ¸µÅ©ÇÑ ¶óÀ̺귯¸®µéÀÌ ½ÇÁ¦·Î ¾îÇø®ÄÉÀ̼ÇÀÌ ¸ðµç µ¿Àû ½É¹úµéÀ» Çص¶(resolve)ÇØ¾ß ÇÏ´Â ¸ðµç ¹öÀü ³ëµåµéÀ» Á¦°øÇÏ´ÂÁö »¡¸® °Ë»çÇÒ ¼ö ÀÖ´Ù. ÀÌ·±½ÄÀ¸·Î µ¿Àû ·Îµå´Â ÀÌ°ÍÀÌ ÇÊ¿ä·ÎÇÏ´Â ¸ðµç ¿ÜºÎ ½É¹úµéÀÌ °¢ ½É¹ú ÂüÁ¶¿¡ ´ëÇؼ Á¶»ç¸¦ ÇÒ ÇÊ¿ä¾øÀÌ Çص¶°¡´É(resolvable)ÀÏ °ÍÀ̶ó°í »ý°¢ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù.
½É¹úÀÇ ¹öÀüÀ» ¸Å±â´Â °Í(symbol versioning)Àº SunOS°¡ ÇÏ´Â ¸¶ÀÌ³Ê ¹öÀü °Ë»ç(minor version checking)¸¦ ¼öÇàÇÏ´Â, Á» ´õ º¹ÀâÇÑ ¹æ¹ýÀÌ´Ù. ¿©±â¿¡ ±â¼úµÈ ±âº»ÀûÀÎ ¹®Á¦´Â, ¶§ ÀüÇüÀûÀ¸·Î ¿ÜºÎ ÇÔ¼öµé¿¡ ´ëÇÑ ÂüÁ¶°¡ ÇÊ¿äÇÑ ¹Ù¿¡ µû¸£´Â ±âÃÊ(as-needed basis)¿¡ ±â¹ÝÇÏ°í, ¾îÇø®ÄÉÀ̼ÇÀÌ ½ÃÀÛÇÒ ¶§ ¸ðµÎ°¡ Á¾¼ÓÀûÀÌÁö´Â ¾Ê´Â´Ù´Â °ÍÀÌ´Ù. °øÀ¯ ¶óÀ̺귯¸®°¡ ¿À·¡µÈ °ÍÀ̶ó¸é ¿ä±¸µÈ ÀÎÅÍÆäÀ̽º°¡ ¾øÀ» ¼ö ÀÖ´Ù; ¾îÇø®ÄÉÀ̼ÇÀÌ ±× ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ·Á°í ÇÒ ¶§, °©Àڱ⠿¹ÃøÇÏÁö ¸øÇÑ ½ÇÆи¦ °ÞÀ» °ÍÀÌ´Ù. ½É¹ú¿¡ ¹öÀüÀ» ¸Å±â´Â °ÍÀ¸·Î »ç¿ëÀÚ´Â, »ç¿ëµÈ ¶óÀ̺귯¸®µéÀÌ ³Ê¹« ¿À·¡µÈ °ÍÀ̶ó¸é ±×µéÀÇ ÇÁ·Î±×·¥À» ½ÃÀÛÇÒ ¶§ °æ°í¸¦ ¾òÀ» °ÍÀÌ´Ù.
SunÀÇ ¹öÀü ¸Å±â´Â Á¢±Ù¹ý¿¡ ´ëÇÑ ¸î°¡Áö GNU È®ÀåÆǵéÀÌ ÀÖ´Ù. À̵éÁß Ã¹¹ø°´Â ½É¹úÀ» ¹öÀü ½ºÅ©¸³Æ® ´ë½Å ½É¹úÀÌ Á¤ÀÇµÈ ¼Ò½º ÆÄÀÏ¿¡¼ ¹öÀü ³ëµå¿¡ ¹ÙÀεùÇÏ´Â ´É·ÂÀÌ´Ù. ÀÌ°ÍÀº ÁÖ·Î ¶óÀ̺귯¸® °ü¸®ÀÚÀÇ ÁüÀ» ´ú¾îÁÖ±â À§Çؼ ¸¸µé¾îÁ³´Ù. ÀÌ°ÍÀº ´ÙÀ½°ú °°Àº °ÍÀ» C ¼Ò½º ÆÄÀϾȿ¡ ³Ö¾î¼ ÀÌ·ç¾îÁú ¼ö ÀÖ´Ù:
__asm__(".symver original_foo,foo@VERS_1.1");
ÀÌ°ÍÀº ÇÔ¼ö `original_foo'¸¦ ¹öÀü ³ëµå `VERS_1.1'¿¡ ¹ÙÀεùµÈ `foo'¿¡ ´ëÇÑ ¾Ë¸®¾î½º·Î À̸§À» ¹Ù²Ù¾ú´Ù. `local:' Áö½Ã¾î´Â ½É¹ú `original_foo'ÀÌ ÀͽºÆ÷Æ®µÇ´Â °ÍÀ» ¸·´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù.
µÎ¹ø° GNU È®ÀåÀº µ¿ÀÏÇÑ ÇÔ¼ö¿¡ ´ëÇÑ ¿©·¯ ¹öÀüµéÀÌ ÁÖ¾îÁø °øÀ¯ ¶óÀ̺귯¸®¾È¿¡ ³ªÅ¸³ªµµ·Ï Çã¶ôÇÑ´Ù´Â °ÍÀÌ´Ù. ÀÌ·±½ÄÀ¸·Î ¾î¶² ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ ºñȣȯ º¯È´Â °øÀ¯ ¶óÀ̺귯¸®ÀÇ ÁÖ ¹öÀü ¹øÈ£¸¦ Áõ°¡½ÃÅ°Áö ¾Ê°í¼ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ¿©ÀüÈ÷ ¿¹Àü ÀÎÅÍÆäÀ̽º¿¡ ¸µÅ©µÈ ¾îÇø®ÄÉÀ̼ǵéÀÌ °è¼Ó ÀÛµ¿ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.
ÀÌ°ÍÀº ¾î¼Àºí·¯ ¾È¿¡ ´Ù¼öÀÇ `.symver' Áö½Ã¾îµéÀ» »ç¿ëÇÔÀ¸·Î½á¸¸ ¼ºÃëµÉ ¼ö ÀÖ´Ù. ÀÌ°ÍÀÇ ¿¹Á¦´Â ´ÙÀ½°ú °°´Ù:
__asm__(".symver original_foo,foo@"); __asm__(".symver old_foo,foo@VERS_1.1"); __asm__(".symver old_foo1,foo@VERS_1.2"); __asm__(".symver new_foo,foo@@VERS_2.0");
ÀÌ ¿¹Á¦¿¡¼ `foo@'´Â ÁöÁ¤µÇÁö ¾ÊÀº ½É¹úÀÇ º£À̽º ¹öÀü¿¡ ¹ÀÎ `foo' ½É¹úÀ» ³ªÅ¸³½´Ù. ÀÌ ¿¹Á¦¸¦ ´ã°í ÀÕ´Â ¼Ò½º ÆÄÀÏÀº 4°³ÀÇ C ÇÔ¼öµéÀ» Á¤ÀÇÇÒ °ÍÀÌ´Ù: `original_foo', `old_foo', `old_foo1', ±×¸®°í `new_foo'.
ÁÖ¾îÁø ½É¹úÀÇ ¿©·¯ Á¤ÀǵéÀ» °¡Áö°í ÀÖ´Ù¸é ÀÌ ½É¹ú¿¡ ´ëÇÑ ¿ÜºÎ ÂüÁ¶µéÀÌ ¹ÙÀεùµÉ µðÆúÆ® ¹öÀüÀ» Á¦½ÃÇÏ´Â ¸î°¡Áö ¹æ¹ýµéÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ°ÍÀº `.symver' Áö½Ã¾îÀÇ `foo@@VERS_2.0' ŸÀÔÀ¸·Î ¼ºÃëµÉ ¼ö ÀÖ´Ù. ¾î¶² ½É¹úÀÇ ÇÑ ¹öÀü¸¸ÀÌ ÀÌ·± ½ÄÀ¸·Î 'µðÆúÆ®'·Î ¼±¾ðµÉ ¼ö ÀÖ´Ù - ±×·¸Áö ¾ÊÀ¸¸é µ¿ÀÏÇÑ ½É¹úÀÇ ¿©·¯ Á¤ÀǵéÀ» È¿°úÀûÀ¸·Î °¡Áö°Ô µÉ °ÍÀÌ´Ù.
°øÀ¯ ¶óÀ̺귯¸®¾È¿¡ ½É¹úÀÇ Æ¯Á¤ ¹öÀü¿¡´Ù ÂüÁ¶¸¦ ¹ÙÀεùÇÏ°íÀÚ ÇÑ´Ù¸é ¿©·¯ºÐÀº Æí¸®ÇÑ ¾Ë¸®¾î½ºµéÀ» »ç¿ëÇÒ ¼ö Àְųª (i.e. `old_foo'), ¶Ç´Â `.symver' Áö½Ã¾î¸¦ »ç¿ëÇؼ ¸í½ÃÀûÀ¸·Î ¹®Á¦ÀÇ ÇÔ¼ö ¿ÜºÎ ¹öÀü¿¡ ¹ÙÀεùÇÒ ¼ö ÀÖ´Ù.
¸í·É ¾ð¾î´Â Ưº°ÇÑ ¸ñÀûµé¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ´Ù¸¥ ¿©·¯ ¸í·ÉµéÀ» Æ÷ÇÔÇÑ´Ù. ±×µéÀº ¸í·ÉÇà ¿É¼Çµé°ú ¸ñÀû»ó ºñ½ÁÇÏ´Ù.
CONSTRUCTORS
a.out
¿ÀºêÁ§Æ® ÆÄÀÏ Æ÷¸äÀ» »ç¿ëÇÏ¿© ¸µÅ©ÇÒ ¶§ ¸µÄ¿´Â C++ ±Û·Î¹ú
»ý¼ºÀÚ¿Í Æı«ÀÚ(destructor)¸¦ Áö¿øÇϱâ À§Çؼ ºñÀÏ»óÀûÀÎ ÁýÇÕ ±¸Á¶¸¦
»ç¿ëÇÑ´Ù. ECOFF
¿Í XCOFF
°°Àº ÀÓÀÇ ¼½¼ÇÀ» Áö¿øÇÏÁö ¾Ê´Â
¿ÀºêÁ§Æ® ÆÄÀÏ Æ÷¸äÀ» ¸µÅ©ÇÒ ¶§ ¸µÄ¿´Â ÀÚµ¿À¸·Î C++ ±Û·Î¹ú »ý¼ºÀÚ¿Í
Æı«ÀÚ¸¦ À̸§À¸·Î ÀνÄÇÑ´Ù. ÀÌ·± ¿ÀºêÁ§Æ® ÆÄÀÏ Æ÷¸äµé¿¡ ´ëÇؼ
CONSTRUCTORS
¸í·ÁÀº ¸µÄ¿¿¡°Ô ÀÌ Á¤º¸°¡ ³õ¿©¾ß ÇÒ À§Ä¡¸¦ ¸»ÇÑ´Ù.
CONSTRUCTORS
¸í·ÉÀº ´Ù¸¥ ¿ÀºêÁ§Æ® ÆÄÀÏ Æ÷¸äµé¿¡ ´ëÇؼ ¹«½ÃµÈ´Ù.
__CTOR_LIST__
½É¹úÀº ±Û·Î¹ú »ý¼ºÀÚÀÇ ½ÃÀÛÁ¡À» ¸¶Å·ÇÏ°í
__DTOR_LIST
´Â ³¡À» ¸¶Å·ÇÑ´Ù. ¸®½ºÆ®ÀÇ Ã¹¹ø° ´Ü¾î´Â
¿£Æ®¸®µéÀÇ °³¼öÀÌ°í ±× µÚ¿¡ °¢ »ý¼ºÀÚ³ª Æı«ÀÚÀÇ ÁÖ¼Ò°¡ µû¶ó¿À¸ç ±×
µÚ¿¡´Â zero word°¡ µû¶ó ¿Â´Ù. ÄÄÆÄÀÏ·¯´Â ¹Ýµå½Ã ±× Äڵ带 ½ÇÁ¦·Î
½ÇÇàÇϵµ·Ï Á¤·ÄµÇ¾î¾ß ÇÑ´Ù. ÀÌ·± ¿ÀºêÁ§Æ® ÆÄÀÏ Æ÷¸äµé¿¡ ´ëÇؼ
__main
¼ºê·çƾÀ¸·ÎºÎÅÍ GNU C++°¡ »ý¼ºÀÚ¸¦ È£ÃâÇÑ´Ù;
__main
¿¡ ´ëÇÑ È£ÃâÀÌ ÀÚµ¿À¸·Î main
ÀÇ ½ÃÀÛ ÄÚµå¾ÈÀ¸·Î
»ðÀԵȴÙ. GNU C++´Â atexit
¸¦ »ç¿ëÇϰųª ÇÔ¼ö
exit
·ÎºÎÅÍ Á÷Á¢ÀûÀ¸·Î Æı«ÀÚµéÀ» ½ÇÇàÇÑ´Ù.
´Ù¼ö ¼½¼ÇµéÀ» Áö¿øÇÏ´Â COFF
¶Ç´Â ELF
¿Í °°Àº ¿ÀºêÁ§Æ® ÆÄÀÏ
Æ÷¸äµé¿¡ ´ëÇؼ GNU C++´Â ÀϹÝÀûÀ¸·Î ±Û·Î¹ú »ý¼ºÀÚ¿Í Æı«ÀÚÀÇ
ÁÖ¼ÒµéÀ» .ctors
¿Í .dtors
¼½¼Çµé¾È¿¡ ³Ö´Â´Ù. ´ÙÀ½À»
¿©·¯ºÐÀÇ ¸µÄ¿ ½ºÅ©¸³Æ®¾È¿¡ ³Ö´Â °ÍÀº GNU C++ ½Ç½Ã°£ Äڵ尡 º¸°ÔµÉ
°ÍÀ¸·Î ±â´ëÇÏ´Â Å×À̺í Á¾·ù¸¦ ºôµåÇÒ °ÍÀÌ´Ù.
__CTOR_LIST__ = .; LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) *(.ctors) LONG(0) __CTOR_END__ = .; __DTOR_LIST__ = .; LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) *(.dtors) LONG(0) __DTOR_END__ = .;ÀϹÝÀûÀ¸·Î ÄÄÆÄÀÏ·¯¿Í ¸µÄ¿´Â ÀÌ·± À̽´µéÀ» ÀÚµ¿À¸·Î ó¸®ÇÒ °ÍÀÌ°í ¿©·¯ºÐÀº ±×°Íµé¿¡ °ü½ÉÀ» °¡Áú ÇÊ¿ä°¡ ¾øÀ» °ÍÀÌ´Ù. ±×·¯³ª ¿©·¯ºÐÀº C++À» »ç¿ëÇÏ°í »ç¿ëÀÚ Á¤ÀÇ ¸µÄ¿ ½ºÅ©¸³¸¦ ÀÛ¼ºÇÏ°í ÀÖ´Ù¸é ÀÌ°ÍÀ» °í·ÁÇØ¾ß ÇÒ °ÍÀÌ´Ù.
FLOAT
NOFLOAT
ld
´Â ´ë½Å¿¡ ÇÊ¿äÇÑ
¼ºê·çƾµéÀÌ ¸ðµÎ ¾ÆÄ«À̺ê·Î ¸µÅ©Çϱâ À§ÇÑ ÀÏ¹Ý ¸ÞÄ«´ÏÁòµéÀ» »ç¿ëÇÏ¿©
ÁöÁ¤µÈ ¶óÀ̺귯¸®µé¾È¿¡ ÀÖ´Ù´Â °ÍÀ» °¡Á¤ÇÏ°í, ÀÌ·± Å°¿öµåµéÀ» »ç¿ëÇÏÁö
¾Ê´Â´Ù: ±×·¯³ª ´õ ¿À·¡µÈ ¸µÄ¿µé¿¡ ´ëÇؼ ¾²¿©Áø ½ºÅ©¸³Æ®ÀÇ »ç¿ëÀ»
Çã¿ëÇϱâ À§Çؼ FLOAT
°ú NOFLOAT
Å°¿öµåµéÀÌ ¹Þ¾Æµé¿©ÁöÁö¸¸
¹«½ÃµÈ´Ù.
FORCE_COMMON_ALLOCATION
ld
°¡
Àç¹èÄ¡ °¡´ÉÇÑ Ãâ·Â ÆÄÀÏÀÌ ÁöÁ¤µÇ´õ¶óµµ (`-r') °ø¿ë ½É¹úµé¿¡ °ø°£À»
ld
°¡ ÇÒ´çÇϵµ·Ï Çϱâ À§Çؼ »ç¿ëÇÑ´Ù.
INCLUDE filename
-L
¿É¼ÇÀ¸·Î ÁÖ¾îÁø ÀÓÀÇÀÇ µð·ºÅ͸®¿¡¼
°Ë»öµÉ °ÍÀÌ´Ù. ¿©·¯ºÐÀº INCLUDE
¿¡ ´ëÇÑ È£ÃâÀ» 10´Ü°è±îÁö °ãÄ¥ ¼ö
ÀÖ´Ù.
INPUT ( file, file, ... )
INPUT ( file file ... )
ld
´Â °¢ fileÀ», ¸í·ÉÇà¿¡¼ ÁöÁ¤ÇÑ ÆÄÀϵ鿡 ´ëÇؼ ÇÏ´Â °Í°ú
µ¿ÀÏÇÏ°Ô, ¾ÆÄ«À̺ê-¶óÀ̺귯¸® °Ë»ö °æ·Î¿¡¼ ã´Â´Ù. `-L'¿¡ ´ëÇÑ
¼³¸íÀ» section ¸í·ÉÇà ¿É¼Çµé(Command Line Options)¿¡¼ º¸ÀÚ.
`-lfile'¸¦ »ç¿ëÇÑ´Ù¸é ld
´Â libfile.a
ÀÇ
À̸§À» ¸í·ÉÇà ¸Å°³º¯¼ö `-l'¿¡¼¿Í °°ÀÌ º¯È¯ÇÒ °ÍÀÌ´Ù.
GROUP ( file, file, ... )
GROUP ( file file ... )
INPUT
¿Í ºñ½ÁÇÏ´Ù. À̸§ÀÖ´Â ÆÄÀϵéÀº ¸ðµÎ
¾ÆÄ«À̺êµéÀ̾î¾ß ÇÑ´Ù´Â °Í°ú ±×µéÀÌ »õ·Î¿î Á¤ÀǵÇÁö ¾ÊÀº ÂüÁ¶µéÀÌ
»ý¼ºµÇÁö ¾ÊÀ»
¶§±îÁö ¹Ýº¹Çؼ °Ë»öµÈ´Ù´Â °ÍÀ» Á¦¿ÜÇÏ°í ºñ½ÁÇÏ´Ù. `-('¿¡ ´ëÇÑ
¼³¸íÀº section ¸í·ÉÇà ¿É¼Çµé(Command Line Options)¸¦ º¸ÀÚ.
OUTPUT ( filename )
OUTPUT(filename)
ÀÇ È¿°ú´Â, ÀÌ°ÍÀ» ¿À¹ö¶óÀ̵åÇÏ´Â
`-o filename'ÀÇ È¿°ú¿Í µ¿ÀÏÇÏ´Ù. ¿©·¯ºÐÀº ÀÌ ¸í·ÉÀ»
»ç¿ëÇؼ a.out
ÀÌ ¾Æ´Ñ µðÆúÆ® Ãâ·Â-ÆÄÀÏ À̸§À» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
OUTPUT_ARCH ( bfdname )
OUTPUT_FORMAT
¸í·ÉÀÇ ºÎ´ë
È¿°ú·Î½á ¾Ï¹¬ÀûÀ¸·Î ¼³Á¤µÈ´Ù.
OUTPUT_FORMAT ( bfdname )
ld
°¡ ´Ù¼öÀÇ ¿ÀºêÁ§Æ® ÄÚµå Æ÷¸äµéÀ» Áö¿øÇϵµ·Ï ¼³Á¤µÉ ¶§ ¿©·¯ºÐÀº
ÀÌ ¸í·ÉÀ» »ç¿ëÇؼ Ưº°ÇÑ Ãâ·Â Æ÷¸äÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. bfdname´Â
BFD ¹é-¿£µå ·çƾ(see section BFD)µé¿¡ ÀÇÇؼ »ç¿ëµÇ´Â À̸§µé ÁßÀÇ ÇϳªÀÌ´Ù.
`--oformat' ¸í·ÉÇà ¿É¼ÇÀÇ È¿°ú¿Í µ¿ÀÏÇÏ´Ù. ÀÌ ¼±ÅÃÀº Ãâ·Â ÆÄÀÏ¿¡¸¸
¿µÇâÀ» ¹ÌÄ£´Ù; °ü·ÃµÈ ¸í·É TARGET
´Â ÁÖ·Î ÀÔ·Â ÆÄÀϵ鿡 ¿µÇâÀ»
¹ÌÄ£´Ù.
SEARCH_DIR ( path )
ld
°¡ ¾ÆÄ«ÀÌºê ¶óÀ̺귯¸®µéÀ» ã´Â °æ·Î ¸®½ºÆ®¿¡
Ãß°¡ÇÑ´Ù. SEARCH_DIR(path)
´Â ¸í·ÉÇàÀÇ `-Lpath'°ú
µ¿ÀÏÇÑ È¿°ú¸¦ °¡Áø´Ù.
STARTUP ( filename )
TARGET ( format )
ld
°¡ ´Ù¼öÀÇ ¿ÀºêÁ§Æ® ÄÚµå Æ÷¸äµéÀ» Áö¿øÇϵµ·Ï ¼³Á¤µÉ ¶§, ÀÌ
¸í·ÉÀ» »ç¿ëÇؼ ÀÔ·Â-ÆÄÀÏ ¿ÀºêÁ§Æ® Æ÷¸äÀ» º¯°æÇÒ ¼ö ÀÖ´Ù(¸í·É-Çà ¿É¼Ç
`-b'³ª ¶Ç´Â À¯»ç¾î `--format'¸¦ »ç¿ëÇÏ´Â °Í°ú °°ÀÌ).
format ¸Å°³º¯¼ö´Â BFD¿¡ ÀÇÇؼ ¹ÙÀ̳ʸ® Æ÷¸äµéÀÇ À̸§À» ÁöÁ¤ÇÏ´Â
µ¥ »ç¿ëµÇ´Â ¹®ÀÚ¿µé ÁßÀÇ ÇϳªÀÌ´Ù. TARGET
ÀÌ ÁöÁ¤µÇÁö¸¸
OUTPUT_FORMAT
Àº ¾Æ´Ï¶ó¸é ¸¶Áö¸· TARGET
ÀÌ ¶ÇÇÑ ld
Ãâ·Â ÆÄÀÏ¿¡ ´ëÇÑ µðÆúÆ® Æ÷¸äÀ¸·Î½á »ç¿ëµÈ´Ù. See section BFD.
TARGET
¸í·ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é ld
´Â Ãâ·Â ÆÄÀÏ Æ÷¸äÀ»
¼±ÅÃÇϱâ À§Çؼ GNUTARGET
ȯ°æº¯¼öÀÇ °ªÀ», ÀÌ°ÍÀÌ °¡´ÉÇÏ´Ù¸é,
»ç¿ëÇÑ´Ù. ±× º¯¼öµµ ¾ø´Ù¸é ld
´Â BFD ¶óÀ̺귯¸®µé¾È¿¡¼ ¿©·¯ºÐÀÇ
¸Ó½®À» À§Çؼ ¼³Á¤µÈ µðÆúÆ® Æ÷¸äÀ» »ç¿ëÇÑ´Ù.
NOCROSSREFS ( section section ... )
ld
¿¡°Ô ¾î¶² ¼½¼Çµé »çÀÌ¿¡ ÀÖ´Â ÂüÁ¶µé¿¡ ´ëÇؼ ¿¡·¯¸¦
¹ß»ýÇϵµ·Ï Ç϶ó°í Áö½ÃÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù.
¾î¶² ÇÁ·Î±×·¥ ŸÀԵ鿡¼´Â, Ưº°È÷ ÀÓº£µðµå ½Ã½ºÅ۵鿡¼´Â, ÇÑ ¼½¼ÇÀÌ
¸Þ¸ð¸®·Î ·ÎµåµÉ ¶§ ´Ù¸¥ ¼½¼ÇÀº ±×·¸Áö ¾ÊÀ» °ÍÀÌ´Ù. µÎ ¼½¼Çµé »çÀÌÀÇ
Á÷Á¢ÀûÀÎ ÂüÁ¶µéÀº ¾î¶² °ÍÀÌµç ¿¡·¯¸¦ ¹ß»ýÇÒ °ÍÀÌ´Ù. ¿¹¸¦ µé¾î¼ ÇÑ
¼½¼Ç¿¡ ÀÖ´Â Äڵ尡 ´Ù¸¥ ¼½¼Ç¿¡ ÀÖ´Â ÇÔ¼ö¸¦ È£ÃâÇß´Ù¸é ¿¡·¯°¡ ¹ß»ýÇÒ
°ÍÀÌ´Ù.
NOCROSSREFS
¸í·ÉÀº ¼½¼Ç À̸§µé ¸®½ºÆ®¸¦ ÃëÇÑ´Ù. ld
°¡ ÀÌ·±
¼½¼Çµé »çÀÌÀÇ ±³Â÷ ÂüÁ¶¸¦ Çϳª¶óµµ °ËÃâÇÑ´Ù¸é ÀÌ°ÍÀº ¿¡·¯¸¦ º¸°íÇÏ°í 0ÀÌ
¾Æ´Ñ Á¾·á »óÅ°ªÀ» ¸®ÅÏÇÑ´Ù. NOCROSSREFS
¸í·ÉÀº SECTIONS
¸í·É¿¡¼ Á¤ÀÇµÈ Ãâ·Â ¼½¼Ç À̸§µéÀ» »ç¿ëÇÑ´Ù. ÀÌ°ÍÀº ÀÔ·Â ¼½¼ÇµéÀÇ À̸§Àº
»ç¿ëÇÏÁö ¾Ê´Â´Ù.
Go to the first, previous, next, last section, table of contents.