GDB's target architecture defines what sort of machine-language programs GDB can work with, and how it works with them.
GDB Ÿ°Ù ¾ÆÅ°ÅØÃÄ´Â GDB°¡ °°ÀÌ ÀÛµ¿ÇÒ¼ö ÀÖ´Â ¸Ó½Å-¾ð¾î ÇÁ·Î±×·¥ÀÇ Á¾·ù¿Í ÀÛµ¿ÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ Á¤ÀÇÀÌ´Ù.
At present, the target architecture definition consists of a number of C macros.
ÇöÀç, Ÿ°Ù ¾ÆÅ°ÅØÃÄ Á¤ÀÇ´Â C ¸ÅÅ©·Î ¼ö·Î ÀÌ·ç¾îÁ® ÀÖ´Ù.
GDB's model of the target machine is rather simple. GDB assumes the machine includes a bank of registers and a block of memory. Each register may have a different size.
Ÿ°Ù ¸Ó½ÅÀÇ GDB ¸ðµ¨Àº ´Ù¼Ò °£´ÜÇÏ´Ù. GDB´Â ¸Ó½ÅÀº ·¹Áö½ºÅÍ ÀúÀå¼Ò¿Í ¸Þ¸ð¸® ºí·°À» Æ÷ÇÔÇÑ´Ù°í °¡Á¤ÇÑ´Ù. °¢ ·¹Áö½ºÅÍ´Â ´Ù¸¥ Å©±â¸¦ °¡Áø´Ù.
GDB does not have a magical way to match up with the
compiler's idea of which registers are which; however, it is critical
that they do match up accurately. The only way to make this work is
to get accurate information about the order that the compiler uses,
and to reflect that in the REGISTER_NAME
and related macros.
GDB´Â ¾î¶² ·¹Áö½ºÅ͵éÀÌ ¾î¶²°ÍÀÌ´Ù¿¡ ´ëÇÑ ÄÄÆÄÀÏ·¯ÀÇ Àνİú ÀÏÄ¡Çϵµ·Ï
Çϱâ À§ÇØ »ö´Ù¸¥ ¹æ¹ýÀ» °¡Áø°ÍÀº ¾Æ´Ï´Ù.; ±×·¯³ª, ±×°ÍµéÀº Á¤È®È÷ ÀÏÄ¡Çؾß
ÇÑ´Ù. ÀÌ·¯ÇÑ ÀÛ¾÷À» ¸¸µå´Â À¯ÀÏÇÑ ¹æ¹ýÀº ÄÄÆÄÀÏ·¯°¡ »ç¿ëÇÏ´Â ¼ø¼¿¡ ´ëÇÑ
Á¤È®ÇÑ Á¤º¸¸¦ °¡Áö´Â °ÍÀ̸ç REGISTER_NAME
¿Í °ü·Ã ¸ÅÅ©·Î³»¿¡
¹Ý¿µÇÏ´Â °ÍÀÌ´Ù.
GDB can handle big-endian, little-endian, and bi-endian architectures.
GDB´Â big-endian, little-endian ±×¸®°í bi-endian ¾ÆÅ°ÅØÃĸ¦ ´Ù·ê¼ö ÀÖ´Ù.
On almost all 32-bit architectures, the representation of a pointer is indistinguishable from the representation of some fixed-length number whose value is the byte address of the object pointed to. On such machines, the words "pointer" and "address" can be used interchangeably. However, architectures with smaller word sizes are often cramped for address space, so they may choose a pointer representation that breaks this identity, and allows a larger code address space.
°ÅÀÇ ¸ðµç 32-ºñÆ® ¾ÆÅ°ÅØÃÄ¿¡¼, Æ÷ÀÎÅÍ Ç¥ÇöÀº Æ÷ÀÎÆ®µÇ°í ÀÖ´Â °´Ã¼ÀÇ ÁÖ¼Ò ¹ÙÀÌÆ® °ªÀÎ ¸î¸î °íÁ¤µÈ ±æÀÌ ¼öÀÇ Ç¥Çö½Ä°ú ±¸ºÐÇÒ¼ö ¾ø´Ù. ±×·¯ÇÑ ¸Ó½Å¿¡¼, pointer¿Í address¶õ ¸»Àº °°ÀÌ »ç¿ëµÈ´Ù. ±×·¯³ª, ÀÛÀº ¿öµå Å©±â¸¦ °¡Áö´Â ¾ÆÅ°ÅØÃÄ´Â ÀÚÁÖ ÁÖ¼Ò °ø°£À» ¾Ë±â ¾î·Æ´Ù. ±×·¡¼ ±×°ÍµéÀº ÀÌ·¯ÇÑ identity¸¦ ¸ØÃß´Â Æ÷ÀÎÅÍ Ç¥Çö½ÄÀ» ¼±ÅÃÇÏ°í Ä¿´Ù¶õ ÄÚµå ÁÖ¼Ò °ø°£À» Çã¿ëÇÑ´Ù.
For example, the Mitsubishi D10V is a 16-bit VLIW processor whose instructions are 32 bits long(2). If the D10V used ordinary byte addresses to refer to code locations, then the processor would only be able to address 64kb of instructions. However, since instructions must be aligned on four-byte boundaries, the low two bits of any valid instruction's byte address are always zero--byte addresses waste two bits. So instead of byte addresses, the D10V uses word addresses--byte addresses shifted right two bits--to refer to code. Thus, the D10V can use 16-bit words to address 256kb of code space.
¿¹¸¦ µé¾î, Mitsubishi D10V´Â ¸í·É¾î°¡ 32bit long(2)ÀÎ 16-bit VLIW processorÀÌ´Ù. ¸¸ÀÏ D10V°¡ ÄÚµå À§Ä¡¸¦ °¡¸®Å°´Â ÀϹÝÀûÀÎ ¹ÙÀÌÆ® ÁÖ¼Ò¸¦ »ç¿ëÇÑ´Ù¸é, ÇÁ·Î¼¼¼´Â ¸í·É¾îÀÇ 64kb¸¦ addressÇÒ¼ö ÀÖ´Ù. ±×·¯³ª, ¸í·É¾î´Â 4 ¹ÙÀÌÆ® °æ°è·Î Á¤·ÄµÇ¾î¾ß Çϱ⠶§¹®¿¡, ¾î¶² À¯È¿ÇÑ ¸í·É¾î ¹ÙÀÌÆ® ÁÖ¼ÒÀÇ ÇÏÀ§ 2 ºñÆ®´Â Ç×»ó 0ÀÌ´Ù.--¹ÙÀÌÆ® ÁÖ¼Ò´Â 2 ºñÆ®¸¦ ³¶ºñÇÑ´Ù. ¹ÙÀÌÆ® ÁÖ¼Ò ´ë½Å¿¡, D10V´Â Äڵ带 ÂüÁ¶Çϱâ À§ÇØ ¿öµå ÁÖ¼Ò¸¦ »ç¿ëÇÑ´Ù.--¹ÙÀÌÆ® ÁÖ¼Ò´Â 2 ºñÆ® ¿À¸¥ÂÊÀ¸·Î shiftµÈ´Ù.-- ÀÌ¿Í °°ÀÌ, D10V´Â ÄÚµå ¿µ¿ªÀÇ 256kb¸¦ ¾îµå·¹½ÌÇϱâ À§ÇØ 16 ºñÆ® ¿öµå¸¦ »ç¿ëÇÒ¼ö ÀÖ´Ù.
However, this means that code pointers and data pointers have different
forms on the D10V. The 16-bit word 0xC020
refers to byte address
0xC020
when used as a data address, but refers to byte address
0x30080
when used as a code address.
±×·¯³ª, ÀÌ°ÍÀº ÄÚµå Æ÷ÀÎÅÍ¿Í µ¥ÀÌÅÍ Æ÷ÀÎÅÍ´Â D10V¿¡¼ ´Ù¸¥ ÇüŸ¦ °¡Áø´Ù´Â
°ÍÀ» ÀǹÌÇÑ´Ù. 16-ºñÆ® ¿öµå 0xC020
´Â µ¥ÀÌÅÍ ÁÖ¼Ò·Î½á »ç¿ëµÉ¶§ ¹ÙÀÌÆ® ÁÖ¼Ò 0xC020
¸¦ °¡¸®Å²´Ù. ±×·¯³ª ÄÚµå ÁÖ¼Ò·Î½á »ç¿ëµÉ¶§´Â
¹ÙÀÌÆ® ÁÖ¼Ò 0x30080
¸¦ °¡¸®Å²´Ù.
(The D10V also uses separate code and data address spaces, which also affects the correspondence between pointers and addresses, but we're going to ignore that here; this example is already too long.)
(D10V´Â ¶ÇÇÑ ÄÚµå¿Í µ¥ÀÌÅÍ ÁÖ¼Ò °ø°£À» ºÐ¸®ÇÒ¶§ »ç¿ëµÇ¸ç, Æ÷ÀÎÅÍ¿Í ÁÖ¼Ò»çÀÌÀÇ »ó°ü°ü°è¿¡ ¿µÇâÀ» ÁØ´Ù. ±×·¯³ª ¿©±â¼´Â ¹«½ÃÇÑ´Ù.; ÀÌ ¿¹Á¦´Â ÀÌ¹Ì ÃæºÐÈ÷ ±æ´Ù.)
To cope with architectures like this--the D10V is not the only
one!---GDB tries to distinguish between addresses, which are
byte numbers, and pointers, which are the target's representation
of an address of a particular type of data. In the example above,
0xC020
is the pointer, which refers to one of the addresses
0xC020
or 0x30080
, depending on the type imposed upon it.
GDB provides functions for turning a pointer into an address
and vice versa, in the appropriate way for the current architecture.
ÀÌ¿Í °°ÀÌ ¾ÆÅ°ÅØÃĸ¦ ¹üÀ§ÈÇϱâ À§ÇØ--D10V´Â Çϳª¸¸ ÀÖÁö ¾Ê´Ù.--GDB´Â ¹ÙÀÌÆ®
¼öÀÎ addresses¿Í ƯÁ¤ µ¥ÀÌÅÍ Å¸ÀÔÀÇ ÁÖ¼Ò¿¡ ´ëÇÑ Å¸°Ù Ç¥Çö½ÄÀÎ
pointers »çÀ̸¦ ±¸ºÐÇÒ·Á°í ÇÑ´Ù.
À§ ¿¹Á¦¿¡¼, 0xC020
´Â ¿©±â¿¡ ºÎ¿©µÈ ŸÀÔ¿¡ ÀÇÁ¸ÇÏ¿© 0xC020
³ª 0x30080
ÁÖ¼ÒÁß Çϳª¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍÀÌ´Ù.
GDB´Â ÇöÀç ¾ÆÅ°ÅØÃÄ¿¡ ¾Ë¸Â´Â ¹æ¹ýÀ¸·Î ÁÖ¼Ò¸¦ Æ÷ÀÎÅÍ·Î ±×¸®°í ±× ¹Ý´ë¸¦ À§ÇÑ ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.
Unfortunately, since addresses and pointers are identical on almost all processors, this distinction tends to bit-rot pretty quickly. Thus, each time you port GDB to an architecture which does distinguish between pointers and addresses, you'll probably need to clean up some architecture-independent code.
ºÒÇàÇÏ°Ôµµ, ÁÖ¼Ò¿Í Æ÷ÀÎÅÍ´Â °ÅÀÇ ¸ðµç ÇÁ·Î¼¼¼µé¿¡¼ µ¿ÀÏÇϱ⠶§¹®¿¡ ÀÌ·¯ÇÑ ±¸ºÐÀº »¡¸® bit-rotÇϱ⠽±´Ù. ÀÌ¿Í °°ÀÌ, ¿©·¯ºÐÀÌ Æ÷ÀÎÅÍ¿Í ÁÖ¼Ò¸¦ ±¸º°ÇÏ´Â ¾ÆÅ°ÅØÃÄ·Î GDB¸¦ Æ÷ÆÃÇÒ¶§¸¶´Ù, ¿©·¯ºÐÀº ¾Æ¸¶ ¾ÆÅ°ÅØÃÄ-µ¶¸³ÀûÀÎ Äڵ带 ¾ø¾Ù ÇÊ¿ä°¡ ÀÖ´Ù.
Here are functions which convert between pointers and addresses:
¿©±â¿¡ Æ÷ÀÎÅÍ¿Í ÁÖ¼Ò»çÀÌÀÇ º¯È¯À» À§ÇÑ ÇÔ¼ö°¡ ÀÖ´Ù.:
Æ÷ÀÎÅͳª ŸÀÔ type¿¡ ´ëÇÑ ÂüÁ¶·Î½á buf ¹ÙÀÌÆ®µéÀ» ´Ù·ç°í, ÇöÀç ¾ÆÅ°ÅØÃÄ¿¡ Àû´çÇÑ ¹æ¹ýÀ¸·Î ÀÌ°ÍÀÌ ³ªÅ¸³»´Â ÁÖ¼Ò¸¦ ¹ÝȯÇÑ´Ù. ÀÌ°ÍÀº GDB°¡ Ÿ°Ù ¸Þ¸ð¸®, disaseembleµîµî¿¡¼ ÀÐÀ»¼ö ÀÖ´Â ÁÖ¼Ò¸¦ »êÃâÇÑ´Ù. buf´Â GDB ¸Þ¸ð¸®³» ¹öÆÛ¸¦ °¡¸®Å°¸ç ³»ºÎ¸¦ °¡¸®Å°´Â°ÍÀÌ ¾Æ´Ï´Ù.
For example, if the current architecture is the Intel x86, this function extracts a little-endian integer of the appropriate length from buf and returns it. However, if the current architecture is the D10V, this function will return a 16-bit integer extracted from buf, multiplied by four if type is a pointer to a function.
¿¹¸¦ µé¾î, ¸¸ÀÏ ÇöÀç ¾ÆÅ°ÅØÃÄ°¡ Intel x86À̶ó¸é, ÀÌ ÇÔ¼ö´Â buf¿¡¼ Àû´çÇÑ ±æÀÌÀÇ little-endian integer¸¦ »Ì¾Æ³»°í ÀÌ°ÍÀ» ¹ÝȯÇÑ´Ù. ±×·¯³ª, ¸¸ÀÏ ÇöÀç ¾ÆÅ°ÅØÃÄ°¡ D10V¶ó¸é, ÀÌ ÇÔ¼ö´Â buf¿¡¼ »Ì¾Æ³½ 16 ºñÆ® Á¤¼ö¸¦ ¹ÝȯÇϸç, ¸¸ÀÏ type°¡ ÇÔ¼ö¿¡ ´ëÇÑ Æ÷ÀÎÅͶó¸é 4¸¦ °öÇÑ 16ºñÆ® Á¤¼ö¸¦ ¹ÝȯÇÑ´Ù.
If type is not a pointer or reference type, then this function will signal an internal error.
¸¸ÀÏ typeÀÌ Æ÷ÀÎÅͳª ÂüÁ¶ ŸÀÔÀÌ ¾Æ´Ï¶ó¸é, ÀÌ ÇÔ¼ö´Â ³»ºÎ ¿¡·¯¸¦ º¸³½´Ù.
ÇöÀç ¾ÆÅ°ÅØÃÄ¿¡¼ ŸÀÔ type Æ÷ÀÎÅÍ¿¡ ¾Ë¸Â´Â Çü½ÄÀ¸·Î, buf¿¡ ÁÖ¼Ò addr¸¦ ÀúÀåÇÑ´Ù. buf´Â GDB ¸Þ¸ð¸®³» ¹öÆÛ¸¦ °¡¸®Å°¸ç ³»ºÎ¸¦ °¡¸®Å°´Â°ÍÀÌ ¾Æ´Ï´Ù.
For example, if the current architecture is the Intel x86, this function stores addr unmodified as a little-endian integer of the appropriate length in buf. However, if the current architecture is the D10V, this function divides addr by four if type is a pointer to a function, and then stores it in buf.
¿¹¸¦ µé¾î, ¸¸ÀÏ ÇöÀç ¾ÆÅ°ÅØÃÄ°¡ Intel x86À̶ó¸é, ÀÌ ÇÔ¼ö´Â buf¿¡¼ Àû´çÇÑ ±æÀÌÀÇ little-endian Á¤¼ö·Î½á ¼öÁ¤µÇÁö ¾ÊÀº addr¸¦ ÀúÀåÇÑ´Ù. ±×·¯³ª, ¸¸ÀÏ ÇöÀç ¾ÆÅ°ÅØÃÄ°¡ D10V¶ó¸é, ÀÌ ÇÔ¼ö´Â ¸¸ÀÏ typeÀÌ ÇÔ¼ö¿¡ ´ëÇÑ Æ÷ÀÎÅͶó¸é 4·Î addr¸¦ ³ª´©°í buf¿¡ ÀúÀåÇÑ´Ù.
If type is not a pointer or reference type, then this function will signal an internal error.
¸¸ÀÏ typeÀÌ Æ÷ÀÎÅͳª ÂüÁ¶ ŸÀÔÀÌ ¾Æ´Ï¶ó¸é, ÀÌ ÇÔ¼ö´Â ³»ºÎ ¿¡·¯¸¦ º¸³½´Ù.
valÀÌ Æ÷ÀÎÅͶó°í °¡Á¤ÇÏ°í, ÇöÀç ¾ÆÅ°ÅØÃÄ¿¡ ¾Ë¸Â°Ô Ç¥ÇöÇÑ ÁÖ¼Ò¸¦ ¹ÝȯÇÑ´Ù.
This function actually works on integral values, as well as pointers.
For pointers, it performs architecture-specific conversions as
described above for extract_typed_address
.
ÀÌ ÇÔ¼ö´Â ½ÇÁ¦·Î Æ÷ÀÎÅÍó·³ Á¤¼ö °ªÀ¸·Î ÀÛµ¿ÇÑ´Ù.
Æ÷ÀÎÅ͸¦ À§ÇØ, ÀÌ ÇÔ¼ö´Â extract_typed_address
¸¦ À§ÇØ À§¿¡¼ ±â¼úÇÑ ¾ÆÅ°ÅØÃÄ ÀÇÁ¸ÀûÀÎ º¯È¯À» ÇÑ´Ù.
store_typed_address
.
ÇöÀç ¾ÆÅ°ÅØÃÄ¿¡ ¾Ë¸Â°Ô, ÁÖ¼Ò addr¸¦ À§ÇØ Å¸ÀÔ typeÀÇ
Ç¥Çö½Ä °ªÀ» ¸¸µé°í ¹ÝȯÇÑ´Ù. ÀÌ ÇÔ¼ö´Â store_typed_address
¸¦ À§ÇØ
À§¿¡¼ ±â¼úÇÑ °Íó·³ ¾ÆÅ°ÅØÃÄ ÀÇÁ¸ÀûÀÎ º¯È¯À» ÇÑ´Ù.
GDB also provides functions that do the same tasks, but assume that pointers are simply byte addresses; they aren't sensitive to the current architecture, beyond knowing the appropriate endianness.
GDB´Â °°Àº ŽºÅ©°¡ ÇÏ´Â ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. ±×·¯³ª Æ÷ÀÎÅ͵éÀº °£´ÜÈ÷ ¹ÙÀÌÆ® ÁÖ¼Ò¶ó°í °¡Á¤ÇÑ´Ù.; ±×°ÍµéÀº Àû´çÇÑ endianÀ» ¾Æ´Â°ÍÀ» ³Ñ¾î, ÇöÀç ¾ÆÅ°ÅØÃÄ¿¡ ¹Î°¨ÇÏÁö ¾Ê´Â´Ù.
ÇöÀç ¾ÆÅ°ÅØÃĸ¦ À§ÇÑ Àû´çÇÑ endianÀÇ addr¿¡¼ len ¹ÙÀÌÆ® ¼ö¸¦ ¾Ë¾Æ³»°í ±×°ÍÀ» ¹ÝȯÇÑ´Ù. addr´Â GDB ¸Þ¸ð¸®¸¦ °¡¸®Å°¸ç ³»ºÎ¸¦ °¡¸®Å°´Â°ÍÀÌ ¾Æ´Ï´Ù.
This function should only be used in architecture-specific code; it
doesn't have enough information to turn bits into a true address in the
appropriate way for the current architecture. If you can, use
extract_typed_address
instead.
ÀÌ ÇÔ¼ö´Â ¾ÆÅ°ÅØÃÄ ÀÇÁ¸ÀûÀÎ Äڵ忡¼¸¸ »ç¿ëµÇ¾î¾ß ÇÑ´Ù.; ÀÌ ÇÔ¼ö´Â ÇöÀç ¾ÆÅ°ÅØÃÄ¿¡¼ Àû´çÇÑ ¹æ¹ýÀ¸·Î ½ÇÁ¦ÁÖ¼Ò·Î ºñÆ®µéÀ» ¹Ù²Ù±â À§ÇÑ ÃæºÐÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖÁö
¾Ê´Ù. ¸¸ÀÏ ¿©·¯ºÐÀÌ ÇÒ¼ö ÀÖ´Ù¸é, extract_typed_address
¸¦ »ç¿ëÇضó.
ÇöÀç ¾ÆÅ°ÅØÃĸ¦ À§ÇÑ Àû´çÇÑ endianÀ¸·Î len-¹ÙÀÌÆ® Á¤¼ö·Î½á val¸¦ addr·Î ÀúÀåÇÑ´Ù. addr´Â GDB ¸Þ¸ð¸®³» ¹öÆÛ¸¦ °¡¸®Å°Áö ¾Ê°í ³»ºÎ¸¦ °¡¸®Å²´Ù.
This function should only be used in architecture-specific code; it
doesn't have enough information to turn a true address into bits in the
appropriate way for the current architecture. If you can, use
store_typed_address
instead.
ÀÌ ÇÔ¼ö´Â ¾ÆÅ°ÅØÃÄ ÀÇÁ¸ÀûÀÎ Äڵ忡¼¸¸ »ç¿ëµÇ¾î¾ß ÇÑ´Ù. ±×°ÍÀº ÇöÀç ¾ÆÅ°ÅØÃÄ¿¡
Àû´çÇÑ ¹æ¹ýÀ¸·Î ½ÇÁ¦ ÁÖ¼Ò¸¦ ºñÆ®·Î ¹Ù²Ù±â À§ÇÑ ÃæºÐÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖÁö ¾Ê´Ù.
¸¸ÀÏ ¿©·¯ºÐÀÌ ÇÒ¼ö ÀÖ´Ù¸é, store_typed_address
¸¦ »ç¿ëÇضó.
Here are some macros which architectures can define to indicate the relationship between pointers and addresses. These have default definitions, appropriate for architectures on which all pointers are simple byte addresses.
¿©±â¿¡ ¾ÆÅ°ÅØÃÄ°¡ Æ÷ÀÌÅÍ¿Í ÁÖ¼Ò »çÀÌÀÇ °ü°è¸¦ °¡¸®Å°µµ·Ï Á¤ÀÇÇÒ¼ö ÀÖ´Â ¸î¸î ¸ÅÅ©·Î°¡ ÀÖ´Ù. À̰͵éÀº ±âº» Á¤ÀÇÀ̸ç, ¸ðµç Æ÷ÀÎÅ͵éÀÌ °£´ÜÈ÷ ¹ÙÀÌÆ® ÁÖ¼ÒÀÎ ¾ÆÅ°ÅØÃÄ¿¡ Àû´çÇÑ
ÇöÀç ¾ÆÅ°ÅØÃĸ¦ À§ÇÑ Àû´çÇÑ Çü½ÄÀ¸·Î, buf´Â Æ÷ÀÎÅÍ Å¸ÀÔ type¸¦ °¡Áø´Ù°í °¡Á¤ÇÑ´Ù. Æ÷ÀÎÅÍ°¡ ÂüÁ¶ÇÏ´Â ¹ÙÀÌÆ® ÁÖ¼Ò¸¦ ¹ÝȯÇÑ´Ù.
This function may safely assume that type is either a pointer or a C++ reference type.
ÀÌ ÇÔ¼ö´Â type´Â Æ÷ÀÎÅͳª C++ ÂüÁ¶ ŸÀÔÁß Çϳª·Î °¡Á¤ÇÑ´Ù.
ÇöÀç ¾ÆÅ°ÅØÃĸ¦ À§ÇÑ Àû´çÇÑ Çü½ÄÀ¸·Î, ÁÖ¼Ò addr¸¦ Ç¥ÇöÇÏ´Â Æ÷ÀÎÅÍ Å¸ÀÔ type¸¦ buf¿¡ ÀúÀåÇÑ´Ù.
This function may safely assume that type is either a pointer or a C++ reference type.
ÀÌ ÇÔ¼ö´Â type´Â Æ÷ÀÎÅͳª C++ ÂüÁ¶ ŸÀÔÁß Çϳª·Î °¡Á¤ÇÑ´Ù.
Some architectures use one representation for a value when it lives in a
register, but use a different representation when it lives in memory.
In GDB's terminology, the raw representation is the one used in
the target registers, and the virtual representation is the one
used in memory, and within GDB struct value
objects.
¸î¸î ¾ÆÅ°ÅØÃÄ´Â ·¹Áö½ºÅÍ¿¡ ³²¾Æ ÀÖ´Â °ªÀ» À§ÇØ ÇϳªÀÇ Ç¥Çö½ÄÀ» »ç¿ëÇÑ´Ù. ±×·¯³ª
¸Þ¸ð¸®³»¿¡ ÀÖÀ»¶§´Â ´Ù¸¥ Ç¥Çö½ÄÀ» »ç¿ëÇÑ´Ù. GDB ¿ë¹ý¿¡¼, raw Ç¥Çö½ÄÀº
Ÿ°Ù ·¹Áö½ºÅÍ¿¡¼ »ç¿ëµÇ´Â °ÍÀ̸ç virtual Ç¥Çö½ÄÀº ¸Þ¸ð¸®¿Í GDB struct value
°´Ã¼³»¿¡¼ »ç¿ëµÇ´Â °ÍÀÌ´Ù.
For almost all data types on almost all architectures, the virtual and raw representations are identical, and no special handling is needed. However, they do occasionally differ. For example:
°ÅÀÇ ¸ðµç ¾ÆÅ°ÅØÃÄ¿¡¼ °ÅÀÇ ¸ðµç µ¥ÀÌÅÍ Ç¥ÇöÀ» À§ÇØ, virtual°ú raw Ç¥Çö½ÄÀº °°À¸¸ç ¾î¶°ÇÑ Æ¯º°ÇÑ Çڵ鸵µµ ÇÊ¿äÇÏÁö ¾Ê´Ù. ±×·¯³ª, ±×°ÍµéÀº °æ¿ì¿¡ µû¶ó ´Ù¸£´Ù. ¿¹¸¦ µé¾î;
long double
type. However, when
we store those values in memory, they occupy twelve bytes: the
floating-point number occupies the first ten, and the final two bytes
are unused. This keeps the values aligned on four-byte boundaries,
allowing more efficient access. Thus, the x86 80-bit floating-point
type is the raw representation, and the twelve-byte loosely-packed
arrangement is the virtual representation.
x86 ¾ÆÅ°ÅØÃÄ´Â 80 ºñÆ® long double
ŸÀÔÀ» Áö¿øÇÑ´Ù.
±×·¯³ª, ¿ì¸®°¡ ¸Þ¸ð¸®³» ÀÌ °ªµéÀ» ÀúÀåÇÑ´Ù¸é À̰͵éÀº 12¹ÙÀÌÆ®¸¦ Â÷ÁöÇÑ´Ù; ºÎµ¿ ¼Ò¼öÁ¡Àº
óÀ½ 10¹ÙÀÌÆ®¸¦ Â÷ÁöÇÏ°í ³ª¸ÓÁö 2 ¹ÙÀÌÆ®´Â »ç¿ëµÇÁö ¾Ê´Â´Ù. ÀÌ°ÍÀº 4 ¹ÙÀÌÆ® °æ°è·Î ÇÒ´çµÇ°í
´õ È¿À²ÀûÀº Á¢±ÙÀ» Çã¿ëÇÑ´Ù. ÀÌ¿Í °°ÀÌ x86 80 ºñÆ® ºÎµ¿¼Ò¼öÁ¡ ŸÀÔÀº raw µ¥ÀÌÅÍ Ç¥Çö½ÄÀÌ´Ù.
±×¸®°í 12¹ÙÀÌÆ® packed ¹è¿Àº virtual Ç¥Çö½ÄÀÌ´Ù.
¸î¸î 64 ºñÆ® MIPS Ÿ°ÙÀº »óÀ§ ºñÆ®³» ¾²·¹±â°ª°ú ÇÔ²² 64 ºñÆ® ·¹Áö½ºÅͷνá GDB¿¡ 32ºñÆ® ·¹Áö½ºÅ͸¦ ³Ñ°ÜÁØ´Ù. GDB´Â »óÀ§ 32ºñÆ®´Â ¹«½ÃÇÑ´Ù. ÀÌ¿Í °°ÀÌ »óÀ§ 32ºñÆ®´Â ¾²·¹±â °ªÀ» °¡Áö´Â 64 ºñÆ®ÇüÅ´ raw Ç¥Çö½ÄÀ̸ç À߶óÁø 32 ºñÆ® Ç¥Çö½ÄÀº virtual ÁÖ¼ÒÀÌ´Ù.
In general, the raw representation is determined by the architecture, or
GDB's interface to the architecture, while the virtual representation
can be chosen for GDB's convenience. GDB's register file,
registers
, holds the register contents in raw format, and the
GDB remote protocol transmits register values in raw format.
ÀϹÝÀûÀ¸·Î, raw Ç¥Çö½ÄÀº ¾ÆÅ°ÅØÃijª ¾ÆÅ°ÅØÃÄ¿¡ ´ëÇÑ GDB ÀÎÅÍÆäÀ̽º¿¡ ÀÇÇØ °áÁ¤µÇ¸ç,
virtual Ç¥Çö½ÄÀº GDB ÆíÀÌ¿¡ µû¶ó ¼±Åõɼö ÀÖ´Ù. GDB ·¹Áö½ºÅÍ ÆÄÀÏ registers
´Â
raw ÇüÅ·Π·¹Áö½ºÅÍ ³»¿ëÀ» °¡Áö¸ç GDB ¿ø°Ý ÇÁ·ÎÅäÄÝÀº raw ÇüÅ¿¡ ·¹Áö½ºÅÍ °ªÀ» Àü´ÞÇÑ´Ù.
Your architecture may define the following macros to request conversions between the raw and virtual format:
¿©·¯ºÐÀÇ ¾ÆÅ°ÅØÃÄ´Â raw¿Í virtual ÇüÅ »çÀÌÀÇ º¯È¯À» ¿ä±¸ÇÏ´Â ´ÙÀ½ ¸ÅÅ©·Î¸¦ Á¤ÀÇÇÑ´Ù:
¸¶´×¤© ·¹Áö½ºÅÍ ¼ö reg °ªÀº ´Ù¸¥ raw¿Í virtual Çü½ÄÀÌ ÇÊ¿äÇÏ´Ù¸é 0ÀÌ ¾Æ´Ñ°ªÀ» ¹ÝȯÇÑ´Ù.
You should not use REGISTER_CONVERT_TO_VIRTUAL
for a register
unless this macro returns a non-zero value for that register.
¿©·¯ºÐ´À ¸¸ÀÏ ÀÌ ¸ÅÅ©·Î°¡ ±× ·¹Áö½ºÅ͸¦ À§ÇØ 0ÀÌ ¾Æ´Ñ °ªÀ» ¹ÝȯÇÏÁö ¾Ê´Â´Ù¸é,
·¹Áö½ºÅ͸¦ À§ÇØ REGISTER_CONVERT_TO_VIRTUAL
À» »ç¿ëÇؼ´Â ¾ÈµÈ´Ù.
registers
, or in a GDB
remote protocol packet.
·¹Áö½ºÅÍ ¼ö regÀÇ raw °ªÀÇ Å©±â. ÀÌ°ÍÀº registers
³ª GDB ¿ø°Ý
ÇÁ·ÎÅäÄÝ ÆÐŶ¿¡¼ Â÷ÁöÇÏ´Â ·¹Áö½ºÅÍ ¹ÙÀÌÆ® ¼öÀÌ´Ù.
struct value
's buffer will have, holding that
register's value.
virtual Çü½Ä¿¡¼ ·¹Áö½ºÅÍ ¼ö reg °ªÀÇ Å©±â.
ÀÌ°ÍÀº ÇØ´ç ·¹Áö½ºÅÍ °ªÀ» °¡Áö´Â struct value
¹öÆÛ Å©±âÀÌ´Ù.
ÀÌ°ÍÀº ·¹Áö½ºÅÍ ¼ö regÀÇ virtual Ç¥Çö½ÄÀÇ Å¸ÀÔÀÌ´Ù. °Å±â¿¡´Â ·¹Áö½ºÅÍ raw Çü½ÄÀ» À§ÇØ Å¸ÀÔÀ» ÁÖ´Â ¸ÅÅ©·Î°¡ ÇÊ¿äÇÏÁö ¾Ê´Ù.;ÀÏ´Ü ·¹Áö½ºÅÍ °ªÀ» ¾ò´Â´Ù¸é, GDB´Â Ç×»ó virtual Çü½ÄÀ» »ç¿ëÇÑ´Ù.
REGISTER_VIRTUAL_TYPE (reg)
. The buffer
at from holds the register's value in raw format; the macro should
convert the value to virtual format, and place it at to.
·¹Áö½ºÅÍ ¼ö regÀÇ °ªÀ» type·Î º¯È¯Çϸç Ç×»ó REGISTER_VIRTUAL_TYPE (reg)
À̾î¾ß ÇÑ´Ù. from¿¡¼ ¹öÆÛ´Â raw Çü½Ä³» ·¹Áö½ºÅÍ °ªÀ»
°¡Áø´Ù.; ¸ÅÅ©·Î´Â °ªÀ» virtual Çü½ÄÀ¸·Î ¹Ù²Ù¸ç ±×°ÍÀ» to¿¡ ³õ´Â´Ù.
Note that REGISTER_CONVERT_TO_VIRTUAL
and
REGISTER_CONVERT_TO_RAW
take their reg and type
arguments in different orders.
REGISTER_CONVERT_TO_VIRTUAL
¿Í REGISTER_CONVERT_TO_RAW
´Â
´Ù¸¥ ¼ø¼·Î reg¿Í type ÀÎÀÚ¸¦ °¡Áø´Ù.
You should only use REGISTER_CONVERT_TO_VIRTUAL
with registers
for which the REGISTER_CONVERTIBLE
macro returns a non-zero
value.
¿©·¯ºÐÀº REGISTER_CONVERTIBLE
¸ÅÅ©·Î°¡ 0ÀÌ ¾Æ´Ñ °ªÀ¸·Î ¸®ÅÏÇÏ´Â ·¹Áö½ºÅ͸¦ °¡Áö´Â REGISTER_CONVERT_TO_VIRTUAL
¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
REGISTER_VIRTUAL_TYPE (reg)
. The buffer at from holds the register's value in raw format; the macro should
convert the value to virtual format, and place it at to.
·¹Áö½ºÅÍÀÇ ¼ö regÀÇ °ªÀ» type·Î ¹Ù²Ù°í, ÀÌ°ÍÀº Ç×»ó REGISTER_VIRTUAL_TYPE (reg)
À̾î¾ß ÇÑ´Ù. from¿¡¼
¹öÆÛ´Â raw Çü½ÄÀÇ ·¹Áö½ºÅÍ °ªÀ» °¡Áø´Ù.;¸ÅÅ©·Î´Â °ªÀ» virtual Çü½ÄÀ̾î¾ß Çϸç,
toÀ¸·Î ³õ¾Æ¾ß ÇÑ´Ù.
Note that REGISTER_CONVERT_TO_VIRTUAL and REGISTER_CONVERT_TO_RAW take their reg and type arguments in different orders.
REGISTER_CONVERT_TO_VIRTUAL°ú REGISTER_CONVERT_TO_RAW´Â ´Ù¸¥ ¼ø¼·Î reg¿Í type ÀÎÀÚ¸¦ °¡Áø´Ù.
This section describes the macros that you can use to define the target machine.
ADDITIONAL_OPTIONS
ADDITIONAL_OPTION_CASES
ADDITIONAL_OPTION_HANDLER
ADDITIONAL_OPTION_HELP
À̰͵éÀº Ãß°¡ÀûÀ¸·Î GDB¿¡ ¸í·É¾î ¶óÀÎ ¿É¼ÇÀ» Çã¿ëÇÏ´Â ¸ÅÅ©·Î ÁýÇÕµéÀÌ´Ù. À̰͵éÀº ÇöÀç Áö¿øµÇÁö ¾Ê´Â i960 Nindy Ÿ°Ù¿¡¼¸¸ »ç¿ëµÇ¸ç ´Ù¸¥ ¼³Á¤»çÇ׿¡¼´Â »ç¿ëµÇ¾î¼´Â ¾ÈµÈ´Ù.
ADDR_BITS_REMOVE (addr)
¸¸ÀÏ ¾î¶² ºñÆ®¸¦ Æ÷ÇÔÇÏ´Â raw ¸Ó½Å ¸í·É¾î ÁÖ¼Ò°¡ ÁÖ¼ÒÀÇ ½ÇÁ¦ ºÎºÐÀÌ ¾Æ´Ï¶ó¸é, ±×·¯¸é addr³» ÀÌµé ºñÆ®µéÀÌ 0ÀΠǥÇö½ÄÀ¸·Î È®ÀåÇϵµ·Ï ÀÌ ¸ÅÅ©·Î¸¦ Á¤ÀÇÇضó. ÀÌ°ÍÀº ¸í·É¾î ÁÖ¼Ò¸¦ À§Çؼ¸¸ »ç¿ëµÇ¸ç ¸ðµç ¹®¸Æ¿¡¼´Â ¾Æ´Ï´Ù.
For example, the two low-order bits of the PC on the Hewlett-Packard PA
2.0 architecture contain the privilege level of the corresponding
instruction. Since instructions must always be aligned on four-byte
boundaries, the processor masks out these bits to generate the actual
address of the instruction. ADDR_BITS_REMOVE should filter out these
bits with an expression such as ((addr) & ~3)
.
¿¹¸¦ µé¾î, Hewlett-Packard PA 2.0 ¾ÆÅ°ÅØÃÄ¿¡¼ PCÀÇ ÇÏÀ§ 2ºñÆ®´Â ¸í·É¾î¿¡
»óÀÀÇÏ´Â ¿ì¼±±Ç ·¹º§À» Æ÷ÇÔÇÑ´Ù.
¸í·É¾î´Â 4 ¹ÙÀÌÆ® °æ°è·Î Á¤·ÄµÇ¾î¾ßÇϱ⠶§¹®¿¡, ÇÁ·Î¼¼¼´Â ¸í·É¾îÀÇ ½ÇÁ¦ ÁÖ¼Ò¸¦
¸¸µé±â À§ÇØ ÀÌµé ºñÆ®¸¦ ¸¶½ºÅ©ÇÑ´Ù. ADDR_BITS_REMOVE´Â ((addr) & ~3)
°°Àº Ç¥Çö½ÄÀ» °¡Áö´Â ÀÌµé ºñÆ®¸¦ ÇÊÅÍÇØ¾ß ÇÑ´Ù.
ADDRESS_TO_POINTER (type, buf, addr)
ÇöÀç ¾ÆÅ°ÅØÃÄ¿¡ Àû´çÇÑ Çü½ÄÀ¸·Î, ÁÖ¼Ò addr¸¦ Ç¥ÇöÇÏ´Â Æ÷ÀÎÅÍ Å¸ÀÔ typeÀ» buf¿¡ ÀúÀåÇÑ´Ù. ÀÌ ¸ÅÅ©·Î´Â type´Â Æ÷ÀÎÅͳª C++ ÂüÁ¶ ŸÀÔÁß Çϳª¶ó´Â°ÍÀ» °¡Á¤ÇÑ´Ù. Ÿ°Ù ¾ÆÅ°ÅØÃÄ Á¤ÀǼ½¼ÇÀ» ÂüÁ¶Çضó.
BEFORE_MAIN_LOOP_HOOK
main ·çÇÁ¸¦ ½ÃÀÛÈ÷±âÀü¿¡ ½ÇÇàÇÏ±æ ¿øÇÏ´Â ÄÚµå·Î È®ÀåÇϱâ À§ÇØ ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù. ¾ö°ÝÈ÷ ¸»Çؼ, ÀÌ°ÍÀÌ Å¸°Ù Á¶°ÇÀÌ ¾Æ´Ô¿¡µµ ºÒ±¸ÇÏ°í ÇöÀç »ç¿ëµÇ´Â ¹æ¹ýÀÌ´Ù. ¸¸ÀÏ ¼³Á¤»çÇ×ÀÌ È£½ºÆ®¸¦ À§ÇØ ¹æ¹ý°ú Ÿ°ÙÀ» À§ÇÑ ´Ù¸¥ ¹æ¹ýÀÌ Á¤ÀǵǾî ÀÖµû¸é, GDB´Â ¾Æ¸¶µµ ÄÄÆÄÀϵÇÁö ¾Ê°í, Á¤È®È÷ È¥ÀÚ µ¹¾Æ°¡µµ·Ï Çã¿ëµÇÁö ¾Ê´Â´Ù. ÀÌ ¸ÅÅ©·Î´Â ÇöÀç´Â Áö¿øµÇÁö ¾Ê´Â i960 Nindy Ÿ°Ù¿¡¼¸¸ »ç¿ëµÇ¸ç ´Ù¸¥ ¼³Á¤»çÇ× ¿¡¼ »ç¿ëµÇ¾î¼´Â ¾ÈµÈ´Ù.
BELIEVE_PCC_PROMOTION
short
or char
parameter to an int
, but still reports the parameter as its
original type, rather than the promoted type.
short
³ª char
ÀÎÀÚ¸¦ int
·Î
º¯°æÇÑ´Ù¸é Á¤ÀÇÇÑ´Ù. ±×·¯³ª ¿©ÀüÈ÷ º¯°æµÈ ŸÀÔº¸´Ù´Â ¿ø ŸÀÔó·³ ÆĶó¹ÌÅ͸¦ º¸°íÇÑ´Ù.
BELIEVE_PCC_PROMOTION_TYPE
short
argument when compiled by pcc
, but look within a full int space to get its value. Only defined for Sun-3 at present.
¸¸ÀÏ GDB°¡ pcc
·Î ÄÄÆÄÀϵɶ§ ŸÀÔ short
ÀÎÀÚ¸¦ ¹Ï´Â´Ù¸é
ÀÌ°ÍÀ» Á¤ÀÇÇضó. ±×·¯³ª ±× °ªÀ» °¡Áö±â À§ÇØ int °ø°£¾È¿¡¼ º¸¾Æ¾ß ÇÑ´Ù.
ÇöÀç´Â Sun-3¿¡¼¸¸ Á¤ÀǵȴÙ.
BITS_BIG_ENDIAN
Ÿ°Ù³» ºñÆ®ÀÇ ¼ö°¡ Ÿ°Ù ¹ÙÀÌÆ® ¼ø¼ÀÇ endian°ú ÀÏÄ¡ÇÏÁö ¾Ê´Â´Ù¸é ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù. °ª 1Àº ±× ºñÆ®°¡ big-endian ºñÆ® ¼ø¼¶ó´Â°ÍÀ» ÀǹÌÇϸç, 0Àº little-endianÀ» ÀǹÌÇÑ´Ù.
BREAKPOINT
BREAKPOINT
has been deprecated in favor of BREAKPOINT_FROM_PC
.
ÀÌ°ÍÀº breakpoint°¡ ¼³Á¤µÇ¾î ÀÖ´Â ¸Þ¸ð¸® ¿µ¿ªÀ¸·Î ºñÆ® ÆÐÅÏÀ» ³Ö±â À§ÇÑ
¹®ÀÚ ¹è¿ initializerÀÌ´Ù. ºñ·Ï ÀÌ°ÍÀÌ breakpoint¸¦ À§ÇÑ trap ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù
ÇÒÁö¶óµµ, ¿ä±¸µÇÁö´Â ¾Ê´Â´Ù.; ¿¹¸¦ µé¾î, bit ÆÐÅÏÀº ¹«È¿ÇÑ ¸í·É¾îÀÌ´Ù.
breakpoint´Â ¾ÆÅ°ÅØÃÄÀÇ °¡Àå ÀÛÀº ¸í·É¾îº¸´Ù ±æ¾î¼´Â ¾ÈµÈ´Ù.
BREAKPOINT
´Â BREAKPOINT_FROM_PC
¶§¹®¿¡ ¹«½ÃµÈ´Ù.
BIG_BREAKPOINT
LITTLE_BREAKPOINT
BIG_BREAKPOINT
and LITTLE_BREAKPOINT
have been deprecated in favor of BREAKPOINT_FROM_PC
.
BREAKPOINT¿Í ºñ½ÁÇÏÁö¸¸, bi-endian Ÿ°ÙÀ» À§ÇØ »ç¿ëµÈ´Ù.
BIG_BREAKPOINT
¿Í LITTLE_BREAKPOINT
´Â BREAKPOINT_FROM_PC
¶§¹®¿¡ ¹«½ÃµÈ´Ù.
REMOTE_BREAKPOINT
LITTLE_REMOTE_BREAKPOINT
BIG_REMOTE_BREAKPOINT
BIG_REMOTE_BREAKPOINT
and LITTLE_REMOTE_BREAKPOINT
have been deprecated in favor of BREAKPOINT_FROM_PC
.
BREAKPOINT¿Í ºñ½ÁÇÏÁö¸¸, ¿ø°Ý Ÿ°ÙÀ» À§ÇØ »ç¿ëµÈ´Ù.
BIG_REMOTE_BREAKPOINT
¿Í LITTLE_REMOTE_BREAKPOINT
´Â
BREAKPOINT_FROM_PC
¶§¹®¿¡ ¹«½ÃµÈ´Ù.
BREAKPOINT_FROM_PC (pcptr, lenptr)
³»¿ë°ú breakpoint ¸í·É¾îÀÇ Å©±â¸¦ °áÁ¤Çϱâ À§ÇØ ÇÁ·Î±×·¥ ¼ö¸¦ »ç¿ëÇÑ´Ù. ÀÌ°ÍÀº breakpoint ¸í·É¾î¸¦ ÀÎÄÚµåÇÏ´Â ¹®ÀÚ¿ ¹ÙÀÌÆ®¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¹ÝȯÇϸç, ¹®ÀÚ¿ÀÇ ±æÀ̸¦ *lenptr¿¡ ÀúÀåÇÏ°í pc(¸¸ÀÏ ÇÊ¿äÇÏ´Ù¸é)¸¦ breakpoint°¡ »ðÀԵǾî¾ß ÇÏ´Â ½ÇÁ¦ ¸Þ¸ð¸® À§Ä¡·Î ¸ÂÃá´Ù. Although it is common to use a trap instruction for a breakpoint, it's not required; for instance, the bit pattern could be an invalid instruction. The breakpoint must be no longer than the shortest instruction of the architecture. Replaces all the other BREAKPOINT macros.
ºñ·Ï ÀÌ°ÍÀÌ breakpoint¸¦ À§ÇÑ trap ¸í·É¾î¿¡ »ç¿ëµÈ´ÙÇÒÁö¶óµµ, ¿ä±¸µÇÁö´Â ¾Ê´Â´Ù. ; ¿¹¸¦ µé¾î, bit patternÀº ¹«È¿ÇÑ ¸í·É¾îÀÌ´Ù. breakpoint´Â ¾ÆÅ°ÅØÃÄÀÇ °¡Àå ÀÛÀº ¸í·É¾îº¸´Ù ±æ¾î¼´Â ¾ÈµÈ´Ù.
MEMORY_INSERT_BREAKPOINT (addr, contents_cache)
MEMORY_REMOVE_BREAKPOINT (addr, contents_cache)
default_memory_insert_breakpoint
and
default_memory_remove_breakpoint
respectively) have been
provided so that it is not necessary to define these for most
architectures. Architectures which may want to define MEMORY_INSERT_BREAKPOINT
and MEMORY_REMOVE_BREAKPOINT
will
likely have instructions that are oddly sized or are not stored in a
conventional manner.
breakpoint ±â¹Ý ¸Þ¸ð¸®¸¦ »ðÀÔÇÏ°í Á¦°ÅÇÑ´Ù. ÀûÀýÇÑ ±âº»°ª(°¢°¢ default_memory_insert_breakpoint
¿Í default_memory_remove_breakpoint
)˼
Á¦°øµÇ¾î¾ß ÇÏ¸ç ´ëºÎºÐÀÇ ¾ÆÅ°ÅØÃÄ¿¡ ÀÌ°ÍÀ» Á¤ÀÇÇÒ ÇÊ¿ä´Â ¾ø´Ù.
MEMORY_INSERT_BREAK POINT
¿Í MEMORY_REMOVE_BREAKPOINT
¸¦
Á¤ÀÇÇÏ±æ ¿øÇÏ´Â ¾ÆÅ°ÅØÃĴ ¦ÀÌ ¾È¸Â´Â Å©±âÀÇ ¸í·É¾î³ª Æí¸®ÇÑ ¹æ¹ýÀ¸·Î ÀúÀåµÇÁö
¾ÊÀº ¸í·É¾î¸¦ °¡Áø´Ù.
It may also be desirable (from an efficiency standpoint) to define
custom breakpoint insertion and removal routines if
BREAKPOINT_FROM_PC
needs to read the target's memory for some
reason.
¸¸ÀÏ BREAKPOINT_FROM_PC
°¡ ¸î¸î ÀÌÀ¯·Î Ÿ°Ù ¸Þ¸ð¸®¸¦ ÀÐÀ» ÇÊ¿ä°¡
ÀÖ´Ù¸é, ÀÏ¹Ý breakpint »ðÀÔ°ú Á¦°Å ·çƾÀ» Á¤ÀÇÇÏ±æ ¿øÇÒ(È¿À²ÀûÀÎ standpoint) °ÍÀÌ´Ù.
CALL_DUMMY_P
Ÿ°ÙÀÌ ³»ºÎ ÇÔ¼ö È£ÃâÀ» Áö¿øÇÒ¶§ C Ç¥Çö½ÄÀº 0ÀÌ ¾Æ´Ï´Ù.
CALL_DUMMY_WORDS
LONGEST
words of data containing
host-byte-ordered REGISTER_BYTES
sized values that partially
specify the sequence of instructions needed for an inferior function
call.
Should be deprecated in favor of a macro that uses target-byte-ordered
data.
³»ºÎ ÇÔ¼ö È£Ãâ¿¡ ÇÊ¿äÇÑ ¸í·É¾î ¼ø¼¸¦ ÁöÁ¤ÇÏ´Â host-byte ¼ø¼ÀÇ REGISTER_BYTES
Å©±âÀÇ °ªÀ» Æ÷ÇÔÇÏ´Â µ¥ÀÌÅÍÀÇ LONGEST
¿öµå ¹è¿¿¡ ´ëÇÑ Æ÷ÀÎÅÍ.
target-byte ¼ø¼ µ¥ÀÌÅ͸¦ »ç¿ëÇÏ´Â ¸ÅÅ©·Î¶§¹®¿¡ ¹«½ÃµÇ¾î¾ß ÇÑ´Ù.
SIZEOF_CALL_DUMMY_WORDS
CALL_DUMMY_WORDS
. When CALL_DUMMY_P
this must return a positive value. See also CALL_DUMMY_LENGTH
.
CALL_DUMMY_WORDS
ÀÇ Å©±â. CALL_DUMMY_P
À϶§, ÀÌ°ÍÀº
¾ç¼ö °ªÀ» ¹ÝȯÇÑ´Ù. ¶ÇÇÑ CALL_DUMMY_LENGTH
¸¦ ÂüÁ¶Çضó.
CALL_DUMMY
CALL_DUMMY_WORDS
. Deprecated.
CALL_DUMMY_WORDS
¸¦ À§ÇÑ static initializer. ¾ø¾îÁ³´Ù.
CALL_DUMMY_LOCATION
ÆÄÀÏ `inferior.h'¸¦ ÂüÁ¶Çضó.
CALL_DUMMY_STACK_ADJUST
STACK_ALIGN
.
½ºÅà Á¶Á¤Àº ³»ºÎ ÇÔ¼ö È£ÃâÀÌ ÀÌ·ç¾îÁ³À»¶§ ÇÊ¿äÇÏ´Ù.
STACK_ALIGN
°°Àº °Í¶§¹®¿¡ ¹«½ÃµÇ¾î¾ß ÇÑ´Ù.
CALL_DUMMY_STACK_ADJUST_P
CALL_DUMMY_STACK_ADJUST
.
Should be deprecated in favor of something like STACK_ALIGN
.
CALL_DUMMY_STACK_ADJUST
»ç¿ëÀ» À§ÇÑ ¼ú¾î.
STACK_ALIGN
°°Àº °Í¶§¹®¿¡ ¹«½ÃµÇ¾î¾ß ÇÑ´Ù.
CANNOT_FETCH_REGISTER (regno)
FETCH_INFERIOR_REGISTERS
is not defined.
¸¸ÀÏ regnoÀÌ ³»ºÎ ÇÁ·Î¼¼½º¿¡¼ fetchµÇÁö ¸øÇÑ´Ù¸é C Ç¥Çö½ÄÀº 0À̾ ¾ÈµÈ´Ù. ¸¸ÀÏ FETCH_INFERIOR_REGISTERS
°¡ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù¸é
ÀûÀýÇÏ´Ù.
CANNOT_STORE_REGISTER (regno)
¸¸ÀÏ regnoÀÌ Å¸°Ù¿¡ ¾²¿©Á®¼´Â ¾ÈµÈ´Ù¸é C Ç¥Çö½ÄÀº 0À̾ ¾ÈµÈ´Ù. ÀͼÀº ÇÁ·Î±×·¥ Ä«¿îÅÍ, »óÅ ¿öµå ±×¸®°í ´Ù¸¥ Ưº°ÇÑ ·¹Áö½ºÅ͸¦ À§ÇÑ °æ¿ìÀÌ´Ù. ¸¸ÀÏ ÀÌ°ÍÀÌ Á¤ÀǵÇÁö ¾Ê¾Ò´Ù¸é, GDB´Â ¸ðµç ·¹Áö½ºÅ͵éÀÌ ¾²¿©Áú¼ö ÀÖ´Ù°í °¡Á¤ÇÑ´Ù.
DO_DEFERRED_STORES
CLEAR_DEFERRED_STORES
¾î¶² ·¹Áö½ºÅÍ ÀúÀåÀ» ³»ºÎ·Î ´ÊÃß¾î ½ÇÇàÇÏ°í ´ÊÃçÁø ÀúÀåÀ» Ãë¼ÒÇϱâ À§ÇØ ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù. ÇöÀç native Sparc ¼³Á¤¿¡¼¸¸ ¼öÇàµÇ´Â°¡?
COERCE_FLOAT_TO_DOUBLE (formal, actual)
float
s to double
s? This macro must evaluate to non-zero if we should, or zero if we should leave the
value alone.
¸¸ÀÏ Á÷Á¢ ÇÔ¼ö¸¦ È£ÃâÇÏ°í ÇÔ¼ö°¡ ¿øÇü ¾øÀÌ ¼±¾ðµÇ¾ú´Ù¸é, ¿ì¸®´Â ÀÚµ¿À¸·Î float
s¸¦ double
s·Î ÇؾßÇϴ°¡?
ÀÌ ¸ÅÅ©·Î´Â ¸¸ÀÏ ¿ì¸®°¡ Çà ÇÑ´Ù¸é 0ÀÌ ¾Æ´Ñ°ªÀ¸·Î Æò°¡Çϰųª °ª¸¸À» ³²°Ü ³õ´Â´Ù¸é 0À¸·Î Æò°¡µÈ´Ù.
The argument actual is the type of the value we want to pass to
the function. The argument formal is the type of this argument,
as it appears in the function's definition. Note that formal may
be zero if we have no debugging information for the function, or if
we're passing more arguments than are officially declared (for example,
varargs). This macro is never invoked if the function definitely has a
prototype.
ÀÎÀÚ actual´Â ¿ì¸®°¡ ÇÔ¼ö¿¡ Àü´ÞÇÏ±æ ¿øÇÏ´Â °ªÀÇ Å¸ÀÔÀÌ´Ù.
ÀÎÀÚ formal´Â ÀÌ ÀÎÀÚÀÇ Å¸ÀÔÀ̸ç ÇÔ¼ö Á¤Àǽà ³ªÅ¸³´Ù.
¸¸ÀÏ ÇÔ¼ö¿¡ ´ëÇÑ µð¹ö±ëÁ¤º¸¸¦ °¡Áö°í ÀÖÁö ¾Ê´Ù¸é, ¶Ç´Â ¸¸ÀÏ °ø½ÄÀûÀ¸·Î ¼±¾ð(¿¹¸¦ µé¾î, °¡º¯ ÀÎÀÚ)µÈ°Í ÀÌ»óÀÇ ÀÎÀÚ¸¦ Àü´ÞÇÑ´Ù¸é formal´Â 0ÀÌ´Ù.
ÀÌ ¸ÅÅ©·Î´Â ¸¸ÀÏ ÇÔ¼ö°¡ ¿øÇüÀ» °¡Áö°í ÀÖ´Ù¸é °áÄÚ È£ÃâµÇÁö ¾Ê´Â´Ù.
The default behavior is to promote only when we have no type information
for the formal parameter. This is different from the obvious behavior,
which would be to promote whenever we have no prototype, just as the
compiler does. It's annoying, but some older targets rely on this. If
you want GDB to follow the typical compiler behavior--to always
promote when there is no prototype in scope--your gdbarch init
function can call set_gdbarch_coerce_float_to_double
and select
the standard_coerce_float_to_double
function.
±âº» ÇൿÀº ¿ì¸®°¡ Á¤±ÔÀÎÀÚ¿¡ ´ëÇÑ Å¸ÀÔ Á¤º¸¸¦ °¡Áö°í ÀÖÁö ¾ÊÀ»¶§¸¸ Á¶ÀåµÈ´Ù.
ÀÌ°ÍÀº ºÐ¸íÇ× Çൿ°ú´Â ´Ù¸£¸ç ÄÄÆÄÀÏ·¯°¡ Çϴ°Íó·³, ¿ì¸®°¡ ¿øÇüÀ» °¡Áö°í ÀÖÁö ¾ÊÀ»¶§´Â ¾ðÁ¦³ª Á¶ÀåµÈ´Ù. Â¥Áõ³ªÁö¸¸ ¸î¸î ¿¹Àü Ÿ°ÙµéÀÌ ÀÌ°Í¿¡ ÀÇÁ¸ÇÑ´Ù.
¸¸ÀÏ ¿©·¯ºÐÀÌ ÀüÇüÀûÀÎ ÄÄÆÄÀÏ·¯ ÇൿÀ» Çã¿ëÇÏ´Â GDB¸¦ ¿øÇÑ´Ù¸é--¹üÀ§³» ¿øÇüÀÌ ¾øÀ»¶§¸¸ Ç×»ó Á¶ÀåµÇµµ·Ï)--¿©·¯ºÐÀÇ gdbarch init
ÇÔ¼ö´Â set_gdbarch_coerce_float_to_double
¸¦ È£ÃâÇÏ°í standard_coerce_float_to_double
ÇÔ¼ö¸¦ ¼±ÅÃÇÑ´Ù.
CPLUS_MARKER
'$'
. Most System V targets should
define this to '.'
.
G++´Â ÄÄÆÄÀÏ·¯°¡ ¸¸µç ½Äº°ÀÚ¿Í ÇÁ·Î±×·¡¸Ó°¡ ¸¸µç ½Äº°ÀÚ¸¦ ±¸º°Çϱâ À§ÇØ »ç¿ëÇÏ´Â ¹®ÀÚ·Î È®ÀåÇϱâ À§ÇØ ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù. ±âº»ÀûÀ¸·Î, ÀÌ°ÍÀº '$'
·Î È®ÀåÇÑ´Ù.
´ëºÎºÐÀÇ System V Ÿ°ÙÀº ÀÌ°ÍÀ» '.'
·Î Á¤ÀÇÇØ¾ß ÇÑ´Ù.
DBX_PARM_SYMBOL_CLASS
SYMBOL_CLASS
of a parameter when decoding DBX symbol
information. In the i960, parameters can be stored as locals or as
args, depending on the type of the debug record.
DBX ½Éº¼ Á¤º¸¸¦ µðº¸±ëÈú¶§ ÆĶó¹ÌÅÍ SYMBOL_CLASS
¸¦ À§ÇÑ ÈÅ.
i960¿¡¼, ÆĶó¹ÌÅÍ´Â µð¹ö±× ·¹ÄÚµå ŸÀÔ¿¡ ÀÇÁ¸ÇÏ¿© ·ÎÄÃÀ̳ª ÀÎÀڷνá ÀúÀåµÈ´Ù.
DECR_PC_AFTER_BREAK
BREAKPOINT
, though not always. For most targets this value will be 0.
ÇÁ·Î±×·¥ÀÌ breakpint¸¦ ¸¸³ÈÄ PC¸¦ ÁÙÀ̱â À§ÇØ ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù. ÀÌ°ÍÀº
Ç×»óÀº ¾Æ´ÏÁö¸¸, BREAKPOINT
³» ¹ÙÀÌÆ®ÀÇ ¼öÀÌ´Ù.
´ëºÎºÐÀÇ Å¸°ÙÀ» À§ÇØ, ÀÌ °ªÀº 0ÀÌ´Ù.
DECR_PC_AFTER_HW_BREAK
ºñ½ÁÇÏ°Ô, hardware breakpint¸¦ À§Çؼ Á¤ÀÇÇÑ´Ù.
DISABLE_UNSETTABLE_BREAK (addr)
¸¸ÀÏ Á¤ÀÇÇÑ´Ù¸é, ÀÌ°ÍÀº addr°¡ breakpint¸¦ ¼³Á¤ÇÒ¼ö ¾ø°í disableÇØ¾ß ÇÏ´Â °øÀ¯ ¶óÀ̺귯¸®³» ÀÖ´Ù¸é 1·Î Æò°¡µÇ¾î¾ß ÇÑ´Ù.
DO_REGISTERS_INFO
¸¸ÀÏ Á¤ÀÇÇÑ´Ù¸é, ·¹Áö½ºÅÍÀÇ °ªÀ̳ª ¸ðµç ·¹Áö½ºÅ͸¦ Ãâ·ÂÇϱâ À§ÇØ ÀÌ°ÍÀ» »ç¿ëÇÑ´Ù.
DWARF_REG_TO_REGNUM
DWARF ·¹Áö½ºÅÍ ¼ö¸¦ GDB regnumÀ¸·Î ¹Ù²Û´Ù. ¸¸ÀÏ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù¸é, ¾î¶² º¯È¯µµ ÀϾÁö ¾Ê´Â´Ù.
DWARF2_REG_TO_REGNUM
DWARF2 ·¹Áö½ºÅÍ ¼ö¸¦ GDB regnumÀ¸·Î ¹Ù²Û´Ù. ¸¸ÀÏ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù¸é, ¾î¶² º¯È¯µµ ÀϾÁö ¾Ê´Â´Ù.
ECOFF_REG_TO_REGNUM
ECOFF ·¹Áö½ºÅÍ ¼ö¸¦ GDB regnumÀ¸·Î ¹Ù²Û´Ù. ¸¸ÀÏ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù¸é, ¾î¶² º¯È¯µµ ÀϾÁö ¾Ê´Â´Ù.
END_OF_TEXT_DEFAULT
ÀÌ°ÍÀº ÅؽºÆ® ¼½¼ÇÀÇ ³¡À» °¡¸®ÄÑ¾ß Çϴ ǥÇö½ÄÀÌ´Ù.
EXTRACT_RETURN_VALUE(type, regbuf, valbuf)
raw ·¹Áö½ºÅÍ »óÅ regbuf¿¡¼ ÇÔ¼öÀÇ ¹Ýȯ °ª ŸÀÔ type¸¦ ¾ò±â À§ÇØ ÀÌ°ÍÀ» Á¤ÀÇÇϸç virtual Çü½Ä¿¡¼ ±×°ÍÀ» valbuf·Î º¹»çÇÑ´Ù.
EXTRACT_STRUCT_VALUE_ADDRESS(regbuf)
EXTRACT_STRUCT_VALUE_ADDRESS_P
is non-zero, this is used to extract from an array regbuf (containing the raw register state) the
address in which a function should return its structure value, as a
CORE_ADDR
(or an expression that can be used as one).
EXTRACT_STRUCT_VALUE_ADDRESS_P
°¡ 0ÀÌ ¾Æ´Ò¶§, ÀÌ°ÍÀº ÇÔ¼ö°¡ CORE_ADDR
(¶Ç´Â Çϳª·Î½á »ç¿ëµÉ¼ö Àִ ǥÇö½Ä)ó·³ ±¸Á¶Ã¼ °ªÀ» ¹ÝȯÇØ¾ß ÇÏ´Â ¹è¿ regbuf(raw ·¹Áö½ºÅÍ »óŸ¦ Æ÷ÇÔÇÏ´Â) ÁÖ¼Ò¸¦ ¾ò±â À§ÇØ »ç¿ëµÈ´Ù.
EXTRACT_STRUCT_VALUE_ADDRESS_P
EXTRACT_STRUCT_VALUE_ADDRESS
.
EXTRACT_STRUCT_VALUE_ADDRESS
¸¦ ¼ú¾î.
FLOAT_INFO
¸¸ÀÏ Á¤ÀǵǾî ÀÖ´Ù¸é, ±×·¯¸é `info float' ¸í·É¾î´Â ÇÁ·Î¼¼¼ ºÎµ¿ ¼Ò¼öÁ¡ ´ÜÀ§¿¡ °üÇÑ Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù.
FP_REGNUM
TARGET_READ_FP
and
TARGET_WRITE_FP
are not defined.
¸¸ÀÏ virtual ÇÁ·¹ÀÓÆ÷ÀÎÅÍ°¡ ·¹Áö½ºÅÍ¿¡ À¯ÁöµÈ´Ù¸é, ±×·Á¸é ÀÌ ¸ÅÅ©·Î´Â
±× ·¹Áö½ºÅÍÀÇ ¼ö(0º¸´Ù Å©°Å³ª °°°Å³ª)·Î Á¤ÀǵǾî¾ß ÇÑ´Ù.
ÀÌ°ÍÀº ¸¸ÀÏ TARGET_READ_FP
¿Í TARGET_WRITE_FP
°¡
Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù¸é Á¤ÀÇµÉ ÇÊ¿ä°¡ ÀÖ´Ù.
FRAMELESS_FUNCTION_INVOCATION(fi)
¸¸ÀÏ fiÀÌ ³ªÅ¸³»´Â ÇÔ¼ö È£ÃâÀÌ ±×°Í°ú °ü·ÃÀÖ´Â ½ºÅà ÇÁ·¹ÀÓÀ» °¡Áö°í ÀÖÁö ¾Ê´Ù¸é 1À» ¹ÝȯÇϴ ǥÇö½ÄÀ¸·Î ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é 0À» ¹ÝȯÇÑ´Ù.
FRAME_ARGS_ADDRESS_CORRECT
`stack.c'À» ÂüÁ¶Çضó.
FRAME_CHAIN(frame)
ÁÖ¾îÁø frame´Â È£Ãâ ÇÁ·¹ÀÓ¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¹ÝȯÇÑ´Ù.
FRAME_CHAIN_COMBINE(chain, frame)
ÇÁ·¹ÀÓ Ã¼ÀÎ Æ÷ÀÎÅ͸¦ °¡Á®¿À°í ÇÁ·¹ÀÓÀÇ ¸í¸ñ»óÀÇ ÁÖ¼Ò¿Í È£ÃâÀÚ ÇÁ·¹ÀÓÀÇ ¸í¸ñ»óÀÇ ÁÖ¼Ò¸¦ ¸¸µé±â À§ÇØ ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù. ÇöÀç HP PA¸¦ À§Çؼ¸¸ Á¤ÀǵȴÙ.
FRAME_CHAIN_VALID(chain, thisframe)
¸¸ÀÏ ÁÖ¾îÁø ÇÁ·¹ÀÓÀÌ È£ÃâÀÚ ¾ø´Â ÃÖ»óÀ§ ÇÁ·¹ÀÓÀ̶ó¸é 0À» ¹ÝȯÇϴ ǥÇö½ÄÀÌ µÇµµ·Ï ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é 0ÀÌ ¾Æ´Ñ°ªÀ» ¹ÝȯÇÑ´Ù. ¸î¸î ÀϹÝÀûÀÎ Á¤ÀÇ°¡ ÀÌ¿ë°¡´ÉÇÏ´Ù:
file_frame_chain_valid
is nonzero if the chain pointer is nonzero
and given frame's PC is not inside the startup file (such as
`crt0.o').
¸¸ÀÏ Ã¼ÀÎ Æ÷ÀÎÅÍ°¡ 0ÀÌ ¾Æ´Ï°í ÁÖ¾îÁø ÇÁ·¹ÀÓ PC°¡ startup ÆÄÀÏ(`crt0.o' °°Àº)³»ºÎ¿¡ ÀÖÁö ¾Ê´Ù¸é file_frame_chain_valid
´Â 0ÀÌ ¾Æ´Ï´Ù.
func_frame_chain_valid
is nonzero if the chain
pointer is nonzero and the given frame's PC is not in main
or a
known entry point function (such as _start
).
¸¸ÀÏ Ã¼ÀÎ Æ÷ÀÎÅÍ°¡ 0ÀÌ ¾Æ´Ï°í ÁÖ¾îÁø ÇÁ·¹ÀÓ PC°¡ main
³ª
¾Ë·ÁÁø ¿£Æ®¸® Æ÷ÀÎÅÍ ÇÔ¼ö(_start
°°Àº)¿¡ ÀÖÁö ¾Ê´Ù¸é
func_frame_chain_valid
´Â 0ÀÌ ¾Æ´Ï´Ù.
generic_file_frame_chain_valid
and
generic_func_frame_chain_valid
are equivalent implementations for
targets using generic dummy frames.
generic_file_frame_chain_valid
°ú generic_func_frame_chain_valid
´Â ÀϹÝÀû ´õ¹Ì ÇÁ·¹ÀÓÀ» »ç¿ëÇϴ Ÿ°ÙÀ» À§ÇÑ ¼öÇà°ú µ¿ÀÏÇÏ´Ù.
FRAME_INIT_SAVED_REGS(frame)
frame->saved_regs
. Space for frame->saved_regs
shall be allocated by
FRAME_INIT_SAVED_REGS
using either
frame_saved_regs_zalloc
or frame_obstack_alloc
.
FRAME_FIND_SAVED_REGS
and EXTRA_FRAME_INFO
are deprecated.
`frame.h'¸¦ ÂüÁ¶Çضó. ÇöÀç ½ºÅÃÇÁ·¹ÀÓ³» ¸ðµç ·¹Áö½ºÅÍÀÇ ÁÖ¼Ò¸¦ frame->saved_regs
°¢°¢¿¡ ÀúÀåÇϵµ·Ï °áÁ¤ÇÑ´Ù.
FRAME_FIND_SAVED_REGS
¿Í EXTRA_FRAME_INFO
´Â ¹«½ÃµÈ´Ù.
frame->saved_regs
¸¦ À§ÇÑ °ø°£Àº frame_saved_regs_zalloc
³ª frame_obstack_alloc
¸¦ »ç¿ëÇÏ´Â FRAME_INIT_SAVED_REGS
¿¡ ÀÇÇØ ÇÒ´çµÇ¾î¾ß ÇÑ´Ù.
FRAME_FIND_SAVED_REGS
¿Í EXTRA_FRAME_INFO
´Â ¾ø¾îÁ³´Ù.
FRAME_NUM_ARGS (fi)
-1
.
fi¿¡ ÀÇÇØ ±â¼úµÈ ÇÁ·¹ÀÓÀº Àü´ÞµÈ ÀÎÀÚÀÇ ¼ö¸¦ ¹ÝȯÇÑ´Ù.
¸¸ÀÏ ÀÎÀÚÀÇ ¼ö°¡ ¾Ë·ÁÁ® ÀÖÁö ¾Ê´Ù¸é, -1
À» ¹ÝȯÇÑ´Ù.
FRAME_SAVED_PC(frame)
ÁÖ¾îÁø frameÀº °Å±â¿¡ ÀúÀåµÈ pc¸¦ ¹ÝȯÇÑ´Ù. ÀÌ°ÍÀº ¸®ÅÏ ÁÖ¼ÒÀÌ´Ù.
FUNCTION_EPILOGUE_SIZE
x_sym.x_misc.x_fsize
field of the
function end symbol is 0. For such targets, you must define
FUNCTION_EPILOGUE_SIZE
to expand into the standard size of a
function's epilogue.
¸î¸î COFF Ÿ°ÙÀ» À§ÇØ, ÇÔ¼ö end ½Éº¼ÀÇ x_sym.x_misc.x_fsize
Çʵå´Â
0ÀÌ´Ù. °¢ Ÿ°ÙÀ» À§ÇØ, ¿©·¯ºÐÀº ÇÔ¼ö epilogueÀÇ Ç¥ÁØ Å©±â·Î È®ÀåÇϱâ À§ÇØ
FUNCTION_EPILOGUE_SIZE
¸¦ Á¤ÀÇÇØ¾ß ÇÑ´Ù.
FUNCTION_START_OFFSET
call
instructions check this value, and save the appropriate registers
automatically. Thus, since the offset from the function's address to
its first instruction is two bytes, FUNCTION_START_OFFSET
would
be 2 on the VAX.
Á¤¼ö, ÇÔ¼ö ÁÖ¼Ò(½Éº¼ °ª, ÇÔ¼ö Æ÷ÀÎÅÍ µîÀ» »ç¿ë)¿¡¼ ¹ÙÀÌÆ®·Î ÁÖ¾îÁø offset ±×¸®°í ÇÔ¼öÀÇ Ã³À½ ÁøÂ¥ ¸í·É¾î.
ÀÌ°ÍÀº °ÅÀÇ ¸ðµç ¸Ó½Å¿¡¼ 0ÀÌ´Ù.; ÇÔ¼ö ÁÖ¼Ò´Â º¸Åë óÀ½ ¸í·É¾îÀÇ ÁÖ¼ÒÀÌ´Ù.
±×·¯³ª, ¿¹¸¦ µé¾î VAX¿¡¼ °¢ ÇÔ¼ö´Â ÇÔ¼ö¿¡ ´ëÇÑ ¿£Æ®¸®¸¦ ÀúÀåÇÏ´Â ·¹Áö½ºÅ͸¦
°¡¸®Å°´Â bitmask¸¦ Æ÷ÇÔÇÏ´Â 2 ¹ÙÀÌÆ®·Î ½ÃÀÛÇÑ´Ù. VAX call
¸í·É¾î´Â
ÀÌ °ªÀ» °Ë»çÇÏ°í Àû´çÇÑ ·¹Áö½ºÅÍ¿¡ ÀÚµ¿À¸·Î ÀúÀåÇÑ´Ù. ÀÌ¿Í °°ÀÌ, ÇÔ¼ö ÁÖ¼Ò¿¡¼
ù ¸í·É¾î±îÁöÀÇ offsetÀÌ 2 ¹ÙÀÌÆ®À̱⶧¹®¿¡, VAX¿¡¼ FUNCTION_START_OFFSET
´Â 2ÀÌ´Ù.
GCC_COMPILED_FLAG_SYMBOL
GCC2_COMPILED_FLAG_SYMBOL
gcc_compiled.
and gcc2_compiled.
,
respectively. (Currently only defined for the Delta 68.)
¸¸ÀÏ Á¤ÀǵǾî ÀÖ´Ù¸é, À̰͵éÀº GCC°¡ ÄÄÆÄÀÏÇÑ ÆÄÀÏÀ» ãµµ·Ï GDB°¡ ã´Â ½Éº¼À̸§ÀÌ´Ù. ±âº» ½Éº¼Àº gcc_compiled.
±×¸®°í gcc2_compiled.
ÀÌ´Ù. (ÇöÀç Delta 68¸¦ À§Çؼ Á¤ÀǵǾî ÀÖ´Ù.)
GDB_MULTI_ARCH
¸¸ÀÏ Á¤ÀǵǾî ÀÖ°í 0ÀÌ ¾Æ´Ï¶ó¸é, GDB³» ¿©·¯ ¾ÆÅ°ÅØÃĸ¦ Áö¿øÇÒ¼ö ÀÖµû. Áö¿øÀº 2 ·¹º§¿¡¼ °¡´ÉÇÏ´Ù. ÇÑ ·¹º§¿¡¼, Àü¿¡ Á¤ÀǵÇÁö ¾ÊÀº ¸ÅÅ©·Î¸¦ À§ÇÑ Á¤ÀǸ¸ÀÌ Á¦°øµÈ´Ù.; ·¹º§ 2¿¡¼, ¸ðµç ¾ÆÅ°ÅØÃÄ ÀÇÁ¸ ¸ÅÅ©·ÎÀÇ multi-arch Á¤ÀÇ°¡ Á¤ÀǵȴÙ.
GDB_TARGET_IS_HPPA
`dbxread.c'¿Í `partial-stab.h'³»ÀÇ ½É°¢ÇÑ kludge Äڵ尡 HPPA¿¡¼ ´ÙÁß ½Éº¼ Å×À̺í ÆÄÀϵéÀ» °ü¸®Çϱâ À§ÇØ »ç¿ëµÉÁö¾Æ´ÒÁö¸¦ °áÁ¤ÇÑ´Ù. ÀÌ°ÍÀº ¸ðµÎ ¾ø¾Ö¾ß ÇÏ¸ç ´ë½Å¿¡ `elfread.c'°°Àº ±¸Á¶¸¦ »ç¿ëÇضó.
GET_LONGJMP_TARGET
longjmp
will jump to,
assuming that we have just stopped at a longjmp
breakpoint. It takes a
CORE_ADDR *
as argument, and stores the target PC value through this
pointer. It examines the current state of the machine as needed.
´ëºÎºÐÀÇ ¸Ó½ÅÀ» À§ÇØ, ÀÌ°ÍÀº Ÿ°Ù ÀÇÁ¸ÀûÀÎ ÆĶó¹ÌÅÍÀÌ´Ù.
DECstation°ú Iris¿¡¼, ÀÌ°ÍÀº native ÀÇÁ¸ ÀÎÀÚÀÌ´Ù. ¿Ö³ÄÇϸé
½ÇÁ¦ Çì´õ ÆÄÀÏ `setjmp.h'°¡ Á¤Àǽà ÇÊ¿äÇÏ´Ù.
ÀÌ ¸ÅÅ©·Î´Â longjmp
¸¦ Á¡ÇÁÇÒ Å¸°Ù PC ÁÖ¼Ò¸¦ °áÁ¤Çϸç,
longjmp
breakpoint¿¡¼ ¸ØÃß¾î¾ß ÇÑ´Ù°í °¡Á¤ÇÑ´Ù.
ÀÎÀÚ·Î CORE_ADDR *
¸¦ °¡Áö¸ç ÀÌ Æ÷ÀÎÅ͸¦ ÅëÇØ Å¸°Ù PC °ªÀ» ÀúÀåÇÑ´Ù. ÇÊ¿äÇÒ¶§¸¶´Ù ¸Ó½ÅÀÇ ÇöÀç »óŸ¦ °Ë»çÇÑ´Ù.
GET_SAVED_REGISTER
get_saved_register
.
¸¸ÀÏ ¿©·¯ºÐÀÌ ÇÔ¼ö get_saved_register
¸¦ À§ÇØ ÀÚ½ÅÀÇ Á¤ÀǸ¦
Á¦°øÇÒ ÇÊ¿ä°¡ ÀÖ´Ù¸é ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù.
HAVE_REGISTER_WINDOWS
¸¸ÀÏ Å¸°ÙÀÌ ·¹Áö½ºÅÍ À©µµ¿ìÀ» °¡Áø´Ù¸é ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù.
REGISTER_IN_WINDOW_P (regnum)
¸¸ÀÏ ÁÖ¾îÁø ·¹Áö½ºÅÍ°¡ À©µµ¿ì¿¡ ÀÖ´Ù¸é Ç¥Çö½ÄÀÌ 1ÀÌ µÇµµ·Ï ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù.
IBM6000_TARGET
IBM RS/6000 targetÀ» À§ÇØ ¼³Á¤µÇ¾ú´Ù´Â°ÍÀ» º¸¿©ÁØ´Ù. ÀÌ Á¶°ÇÀº ¾ø¾îÁ®¾ß(FIXME)Çϸç feature-specific ¸ÅÅ©·Î¿¡ ÀÇÇØ ´ëüµÇ¾î¾ß ÇÑ´Ù. ±×°ÍÀº ¼º±ÞÇÏ°Ô ¼Ò°³µÇ¾úÀ¸¸ç ÈÄȸÇÏ°í ÀÖ´Ù.
I386_USE_GENERIC_WATCHPOINTS
x86 ±â¹Ý Ÿ°ÙÀº ÀϹÝÀûÀÎ x86 watchpint Áö¿øÀ» »ç¿ëÇϱâÀ§ÇØ ÀÌ°ÍÀ» Á¤ÀÇÇÒ¼ö ÀÖ´Ù.; Algorithms¼½¼ÇÀ» ÂüÁ¶Çضó.
SYMBOLS_CAN_START_WITH_DOLLAR
¸î¸î ½Ã½ºÅÛÀº `$'·Î ½ÃÀÛÇÏ´Â À̸§ÀÇ ·çƾÀ» °¡Áø´Ù.
0ÀÌ ¾Æ´Ñ °ªÀÇ ¸ÅÅ©·Î¸¦ ÁÖ´Â °ÍÀº `$'·Î ½ÃÀÛÇÏ´Â ÅäÅ«À»
ÆĽÌÇÒ¶§ ±×·¯ÇÑ ·çƾÀ» °Ë»çÇϵµ·Ï GDB Ç¥Çö½Ä Æļ¿¡°Ô ¸»Çϴ°ÍÀÌ´Ù.
On HP-UX, certain system routines (millicode) have names beginning with
`$' or `$$'. For example, $$dyncall
is a millicode routine that handles inter-space procedure calls on PA-RISC.
HP-UX¿¡¼, ¾î¶² ½Ã½ºÅÛ ·çƾ(millicode)Àº `$'³ª `$$'·Î ½ÃÀÛÇÏ´Â À̸§À» °¡Áø´Ù. ¿¹¸¦ µé¾î, $$dyncall
´Â
PA-RISC¿¡¼ inter-space ÇÁ·Î½ÃÁ®¸¦ ó¸®ÇÏ´Â millicode ·çƾÀÌ´Ù.
IEEE_FLOAT
¸¸ÀÏ Å¸°Ù ½Ã½ºÅÛÀÌ IEEE-Çü½Ä ºÎµ¿¼Ò¼öÁ¡ ¼ö¸¦ »ç¿ëÇÑ´Ù¸é ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù.
INIT_EXTRA_FRAME_INFO (fromleaf, frame)
frame->extra_info
. Space for frame->extra_info
is allocated using frame_obstack_alloc
.
¸¸ÀÏ ÇÁ·¹ÀÓ¿¡ °üÇÑ Ãß°¡ÀûÀÎ Á¤º¸°¡ ¿ä±¸µÈ´Ù¸é, ÀÌ°ÍÀº frame->extra_info
¿¡ ÀúÀåµÇ¾î¾ß ÇÑ´Ù. frame->extra_info
¸¦ À§ÇÑ °ø°£Àº frame_obstack_alloc
»ç¿ë½Ã ÇÒ´çµÈ´Ù.
INIT_FRAME_PC (fromleaf, prev)
ÀÌ°ÍÀº prev°¡ °¡¸®Å°´Â ÇÁ·¹ÀÓÀÇ pc¸¦ ¼³Á¤ÇÏ´Â C ¹®ÀåÀÌ´Ù.
INNER_THAN (lhs, rhs)
lhs < rhs
if the target's stack grows downward in memory, or lhs > rsh
if the stack grows upward.
¸¸ÀÏ ½ºÅà ÁÖ¼Ò lhs°¡ ½ºÅà ÁÖ¼Ò rhsº¸´Ù ³»ºÎ(½ºÅà top¿¡ ´õ °¡±î¿î)¿¡ ÀÖ´Ù¸é 0ÀÌ ¾Æ´Ñ °ªÀÌ ¹ÝȯµÈ´Ù.
¸¸ÀÏ Å¸°Ù ½ºÅÃÀÌ ¸Þ¸ð¸®³» ¾Æ·¡ÂÊÀ¸·Î ¼ºÀåÇÑ´Ù¸é lhs < rhs
·Î½á ÀÌ°ÍÀ» Á¤ÀÇÇÏ°í ¸¸ÀÏ ½ºÅÃÀÌ À§ÂÊÀ¸·Î ¼ºÀåÇÑ´Ù¸é lhs > rsh
¸¦ Á¤ÀÇÇÑ´Ù.
IN_SIGTRAMP (pc, name)
sigtramp
.
¸¸ÀÏ ÁÖ¾îÁø pc¾Æ nameÀÌ ÇöÀç ÇÔ¼ö´Â sigtramp
À̶ó´Â°ÍÀ» °¡¸®Å²´Ù¸é 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇϵµ·Ï ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù.
SIGTRAMP_START (pc)
SIGTRAMP_END (pc)
sigtramp
for the
given pc. On machines where the address is just a compile time
constant, the macro expansion will typically just ignore the supplied
pc.
isigtramp
´ÙÀ½¿¡ ÁÖ¾îÁø pcÀÇ ½ÃÀÛ°ú ³¡ ÁÖ¼Ò·Î À̰͵éÀ» Á¤ÀÇÇÑ´Ù. ÁÖ¼Ò´Â ÄÄÆÄÀÏ ½Ã°£ÀÎ ¸Ó½Å¿¡¼, ¸ÅÅ©·Î È®ÀåÀº Á¦°øµÈ pc¸¦ ¹«½ÃÇÒ°ÍÀÌ´Ù.
IN_SOLIB_CALL_TRAMPOLINE (pc, name)
¸¸ÀÏ ÇÁ·Î±×·¥ÀÌ °øÀ¯ ¶óÀ̺귯¸®¿Í ¿¬°áÇÏ´Â trampoline¿¡¼ ¸ØÃá´Ù¸é 0ÀÌ ¾Æ´Ñ °ªÀ¸·Î Æò°¡Çϵµ·Ï ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù.
IN_SOLIB_RETURN_TRAMPOLINE (pc, name)
¸¸ÀÏ ÇÁ·Î±×·¥ÀÌ °øÀ¯¶óÀ̺귯¸®¿¡¼ ¹ÝȯµÇ´Â trampoline¿¡¼ ¸ØÃá´Ù¸é 0ÀÌ ¾Æ´Ñ°ªÀ¸·Î Æò°¡Çϵµ·Ï ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù.
IN_SOLIB_DYNSYM_RESOLVE_CODE (pc)
¸¸ÀÏ ÇÁ·Î±×·¥ÀÌ µ¿Àû ¸µÄ¿³»¿¡¼ ¸ØÃá´Ù¸é 0ÀÌ ¾Æ´Ñ°ªÀ¸·Î Æò°¡Çϵµ·Ï ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù.
SKIP_SOLIB_RESOLVER (pc)
½ÇÇàÀº µ¿Àû ¸µÄ¿ ½Éº¼ Çؼ® ÇÔ¼ö¿¡¼ °¡Áö±â À§ÇØ continueÇØ¾ß ÇÏ´Â (nonzero)ÁÖ¼Ò·Î Æò°¡Çϵµ·Ï ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù. zero °ªÀº ±×°ÍÀº µ¿Àû ¸µÄ¿¸¦ ÅëÇØ ¾ò±â À§ÇØ breakpoint ¼³Á¤Çϴ°ÍÀº Áß¿äÇϰųª ÇÊ¿äÇÏÁö ¾Ê´Ù´Â°ÍÀ» °¡¸®Å°¸ç ±× ´ÜÀÏ steppingÀº ÃæºÐÇÏ´Ù.
IS_TRAPPED_INTERNALVAR (name)
ÀÌ°ÍÀº GDB³» º¯¼ö °ªÀ» ¼³Á¤ÀÇ side-effect·Î½á ÀϾ¾ß Çϴ Ưº°ÇÑ ÇൿÀÇ ³»¿ªÀ» Çã¿ëÇÏ´Â ÁÁÁö ¾ÊÀº ÈÅÀÌ´Ù. ÇöÀç h8500¿¡¼¸¸ »ç¿ëµÈ´Ù. ÀÌ°ÍÀº host³ª Ÿ°Ù Á¶°ÇÀ̾î¾ß ÇÑ´Ù.
NEED_TEXT_START_END
¸¸ÀÏ GDB°¡ ÅؽºÆ® ¼½¼ÇÀÇ ½ÃÀÛ°ú ³¡ ÁÖ¼Ò¸¦ °áÁ¤ÇØ¾ß ÇÑ´Ù¸é ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù. (Àǽɽº·´´Ù.)
NO_HIF_SUPPORT
POINTER_TO_ADDRESS (type, buf)
buf´Â ÇöÀç ¾ÆÅ°ÅØÃĸ¦ À§ÇÑ Àû´çÇÑ Çü½ÄÀ¸·Î Æ÷ÀÎÅÍ Å¸ÀÔ type¸¦ °¡Áø´Ù. Æ÷ÀÎÅÍ°¡ ÂüÁ¶ÇÏ´Â ¹ÙÀÌÆ® ÁÖ¼Ò¸¦ ¹ÝȯÇÑ´Ù. Target Architecture Definition ¼½¼ÇÀ» ÂüÁ¶Çضó.
REGISTER_CONVERTIBLE (reg)
¸¸ÀÏ regÀÌ ´Ù¸¥ raw¿Í virtual Çü½ÄÀ» »ç¿ëÇÑ´Ù¸é 0ÀÌ ¾Æ´Ñ°ªÀ» ¹ÝȯÇÑ´Ù. Target Architecture Definition ¼½¼ÇÀ» ÂüÁ¶Çضó.
REGISTER_RAW_SIZE (reg)
regÀÇ raw »çÀÌÆ®¸¦ ¹ÝȯÇÑ´Ù. Target Architecture Definition ¼½¼ÇÀ» ÂüÁ¶Çضó.
REGISTER_VIRTUAL_SIZE (reg)
regÀÇ virtual Å©±â¸¦ ¹ÝȯÇÑ´Ù. Target Architecture Definition ¼½¼ÇÀ» ÂüÁ¶Çضó.
REGISTER_VIRTUAL_TYPE (reg)
regÀÇ virtual typeÀ» ¹ÝȯÇÑ´Ù. Target Architecture Definition ¼½¼ÇÀ» ÂüÁ¶Çضó.
REGISTER_CONVERT_TO_VIRTUAL(reg, type, from, to)
raw ÇüÅ¿¡¼ virtual ÇüÅ·Π·¹Áö½ºÅÍÀÇ °ª reg¸¦ ¹Ù²Û´Ù. Target Architecture Definition ¼½¼ÇÀ» ÂüÁ¶Çضó.
REGISTER_CONVERT_TO_RAW(type, reg, from, to)
virtual ÇüÅ¿¡¼ raw ÇüÅ·Π·¹Áö½ºÅÍ °ª reg¸¦ ¹ÝȯÇÑ´Ù. Target Architecture Definition ¼½¼ÇÀ» ÂüÁ¶ Çضó.
RETURN_VALUE_ON_STACK(type)
¸¸ÀÏ Å¸ÀÔ TYPEÀÇ °ªÀÌ "struct convention"À» »ç¿ëÇÏ´Â ½ºÅÿ¡¼ ¹ÝȯµÈ´Ù¸é, 0ÀÌ ¾Æ´Ñ°ªÀ» ¹ÝȯÇÑ´Ù. (i.e., È£ÃâÀÚ´Â callee°¡ ¹Ýȯ°ªÀ» ÀúÁ¤ÇØ¾ß ÇÏ´Â buffer¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ Á¦°øÇÑ´Ù.) ÀÌ°ÍÀº `finish' ¸í·É¾î°¡ ÇÔ¼öÀÇ ¸®ÅÏ°ªÀ» ¹ß°ßÇÏ´Â ¹æ¹ýÀ» Á¦¾îÇÏ¸ç ³»ºÎ ÇÔ¼ö È£ÃâÀÌ ¸®ÅÏ °ªÀ» À§ÇÑ ½ºÅó» °ø°£À» À¯ÁöÇÏ´ÂÁö¸¦ Á¦¾îÇÑ´Ù. ¿©±â¼ GDB°¡ »ç¿ëÇÏ´Â ¿ÏÀüÇÑ ·ÎÁ÷Àº ¿©·¯ Á¾·ùÀÌ´Ù.
RETURN_VALUE_ON_STACK
returns zero, then GDB
concludes the value is not returned using the struct convention.
¸¸ÀÏ °ªÀÌ ¹ÝȯÇϴ ŸÀÔÀÌ ±¸Á¶Ã¼, union, array°¡ ¾Æ´Ï°í RETURN_VALUE_ON_STACK
°¡ 0À» ¸®ÅÏÇÑ´Ù¸é, ±×·¯¸é GDB´Â °ªÀº struct conventionÀ» »ç¿ëÇÏ¿© ¸®ÅϵÇÁö ¾Ê´Â´Ù°í °á·ÐÁþ´Â´Ù.
USE_STRUCT_CONVENTION
(see below).
If that returns non-zero, GDB assumes the struct convention is
in use.
±×·¸Áö ¾ÊÀ¸¸é, GDB´Â USE_STRUCT_CONVENTION
¸¦ È£ÃâÇÑ´Ù.(¾Æ·¡ ÂüÁ¶)
¸¸ÀÏ ±×°ÍÀÌ 0ÀÌ ¾Æ´Ñ°ªÀ» ¸®ÅÏÇÑ´Ù¸é, GDB´Â struct conventionÀÌ À¯È¿ÇÏ´Ù°í °¡Á¤ÇÑ´Ù.
RETURN_VALUE_ON_STACK
likes, and something that USE_STRUCT_CONVENTION
likes.
´Ù½Ã ¸»Çؼ, ÁÖ¾îÁø ŸÀÔÀÌ struct conventionÀ» »ç¿ëÇÑ °ªÀ» ¸®ÅÏÇѴٴ°ÍÀ»
°¡¸®Å°±â À§ÇØ Å¸ÀÔÀº struct, union, array ¶Ç´Â RETURN_VALUE_ON_STACK
°°Àº °Í ±×¸®°í USE_STRUCT_CONVENTION
°°Àº °ÍÁßÀ̾î¾ß ÇÑ´Ù.
Note that, in C and C++, arrays are never returned by value. In those
languages, these predicates will always see a pointer type, never an
array type. All the references above to arrays being returned by value
apply only to other languages.
C¿Í C++¿¡¼ array´Â °ª¿¡ ÀÇÇØ ¸®ÅϵÇÁö ¾Ê´Â´Ù. ÀÌµé ¾ð¾î¿¡¼, ÀÌµé ¼ú¾î´Â Ç×»ó ¹è¿ ŸÀÔÀÌ ¾Æ´Ï¶ó Æ÷ÀÎÅÍ Å¸ÀÔÀ¸·Î º»´Ù. °ª¿¡ ÀÇÇØ ¸®ÅÏÇÏ´Â ¹è¿¿¡ ´ëÇÑ ÂüÁ¶ ¸ðµÎ´Â ´Ù¸¥¾ð¾î¿¡µµ Àû¿ëµÈ´Ù.
SOFTWARE_SINGLE_STEP_P()
SOFTWARE_SINGLE_STEP
must also be defined.
¸¸ÀÏ Å¸°ÙÀÌ Çϵå¿þ¾î single-step ¸ÞÄ«´ÏÁòÀ» °¡ÁöÁö ¾Ê´Â´Ù¸é ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù.
¸ÅÅ©·Î SOFTWARE_SINGLE_STEP
¶ÇÇÑ Á¤ÀǵǾî¾ß ÇÑ´Ù.
SOFTWARE_SINGLE_STEP(signal, insert_breapoints_p)
´ÙÀ½ ¸í·É¾îÀÇ °¡´ÉÇÑ ¸ñÀûÁö¸¶´Ù breakpoint¸¦ »ðÀÔÇÏ°í Á¦°Å(insert_breapoints_p¿¡ ÀÇÁ¸)ÇÏ´Â ÇÔ¼ö. `sparc-tdep.c'¿Í `rs6000-tdep.c'¸¦ ÂüÁ¶Çضó.
SOFUN_ADDRESS_MAYBE_MISSING
¿µ¸®ÇÑ »ç¶÷Àº ¿©·¯ºÐÀÌ µð¹ö±× Á¤º¸¿¡¼ °¡Áö´Â ÁÖ¼Ò°¡ ´õ ½ÇÁ¦ÀûÀϼö·Ï ¸µÄ¿´Â ±×°ÍµéÀ» Àç ÇÒ´çÇϴµ¥ ´õ ¸¹Àº ½Ã°£À» °¡Áø´Ù´Â°ÍÀ» ¾È´Ù.
±×·¡¼ µð¹ö°Å°¡ ÇÊ¿äÇÑ ÁÖ¼Ò¸¦ ¹ß°ßÇÒ¼ö ÀÖ´Â ´Ù¸¥ ¹æ¹ýÀÌ ÀÖÀ»¶§¸¶´Ù,
¿©·¯ºÐÀº ´õ ºü¸¥ Á¤º¸¸¦ À§ÇØ µð¹ö±× Á¤º¸¿¡¼ ±×°ÍÀ» »©¾ß ÇÑ´Ù.
SOFUN_ADDRESS_MAYBE_MISSING
indicates that a particular set of
hacks of this sort are in use, affecting N_SO
and N_FUN
entries in stabs-format debugging information. N_SO
stabs mark the beginning and ending addresses of compilation units in the text
segment. N_FUN
stabs mark the starts and ends of functions.
SOFUN_ADDRESS_MAYBE_MISSING
means two things:
SOFUN_ADDRESS_MAYBE_MISSING
´Â Ưº°È÷ ÀÌ·± Á¾·ùÀÇ hack ÁýÇÕÀº stabs Çü½Ä µð¹ö±ë Á¤º¸³» N_SO
¿Í N_FUN
¿£Æ®¸®¿¡ ¿µÇâÀ» Áشٴ°ÍÀ» °¡¸®Å²´Ù.
N_SO
stabÀº ÅؽºÆ® ¼¼±×¸ÕÆ®³» ÄÄÆÄÀÏ ´ÜÀ§ÀÇ ½ÃÀÛ°ú ³¡ ÁÖ¼Ò¸¦ Ç¥½ÃÇÑ´Ù. N_FUN
stabÀº ÇÔ¼öÀÇ ½ÃÀÛ°ú ³¡À» Ç¥½ÃÇÑ´Ù.
N_FUN
stabs have an address of zero. Instead, you should find the
addresses where the function starts by taking the function name from
the stab, and then looking that up in the minsyms (the
linker/assembler symbol table). In other words, the stab has the
name, and the linker/assembler symbol table is the only place that carries
the address.
N_FUN
stabÀº ÁÖ¼Ò 0À» °¡Áø´Ù. ´ë½Å¿¡, ¿©·¯ºÐÀº ÇÔ¼ö°¡ stab¿¡¼ÀÇ ÇÔ¼ö À̸§À» °¡Áö±â ½ÃÀÛÇÏ°í minsyms(linker/assember symbol table)¿¡¼ ãµµ·Ï ÁÖ¼Ò¸¦ ã¾Æ¾ß ÇÑ´Ù.
´Ù½Ã ¸»Çؼ, stabÀº À̸§À» °¡Áö°í linter/assembler symbol tableÀº ÁÖ¼Ò¸¦
³ª¸£´Â Àå¼ÒÀÌ´Ù.
N_SO
stabs have an address of zero, too. You just look at the
N_FUN
stabs that appear before and after the N_SO
stab,
and guess the starting and ending addresses of the compilation unit from
them.
N_SO
µµ ¿ª½Ã 0ÀÇ ÁÖ¼Ò¸¦ °¡Áø´Ù. ¿©·¯ºÐÀº N_SO
stab
ÀüÈÄ¿¡ ³ªÅ¸³ª´Â N_FUN
¸¦ º¸°í ±×°Íµé¿¡¼ ÄÄÆÄÀÏ ´ÜÀ§ÀÇ
½ÃÀÛ°ú ³¡ ÁÖ¼Ò¸¦ ÃßÃøÇÑ´Ù.
PCC_SOL_BROKEN
(Convex Ÿ°Ù¿¡¼¸¸ »ç¿ëµÈ´Ù.)
PC_IN_CALL_DUMMY
`inferior.h'¸¦ ÂüÁ¶Çضó.
PC_LOAD_SEGMENT
¸¸ÀÏ Á¤ÀǵǾî ÀÖ´Ù¸é, ÇÁ·Î±×·¥ Ä«¿îÆ®¸¦ À§ÇÑ ·Îµå ¼¼±×¸ÕÆ®¿¡ °üÇÑ Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù.(RS/6000¿¡¼¸¸ Á¤ÀǵȴÙ.)
PC_REGNUM
¸¸ÀÏ ÇÁ·Î±×·¥ Ä«¿îÆ®°¡ ·¹Áö½ºÅÍ¿¡ À¯ÁöµÈ´Ù¸é, ÀÌ ¸ÅÅ©·Î¸¦ ±× ·¹Áö½ºÅÍÀÇ ¼ö
(0º¸´Ù Å©°Å³ª °°´Ù)°¡ µÇµµ·Ï Á¤ÀÇÇÑ´Ù.
This should only need to be defined if TARGET_READ_PC
and
TARGET_WRITE_PC
are not defined.
ÀÌ°ÍÀº ¸¸ÀÏ TARGET_READ_PC
¿Í TARGET_WRITE_PC
°¡ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù¸é Á¤ÀÇÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.
NPC_REGNUM
¸¸ÀÏ Á¤ÀǵǾî ÀÖ´Ù¸é, "next program counter" ·¹Áö½ºÅÍÀÇ ¼ö.
NNPC_REGNUM
¸¸ÀÏ Á¤ÀǵǾî ÀÖ´Ù¸é, "next next program counter" ·¹Áö½ºÅÍÀÇ ¼ö. ÇöÀç, ÀÌ°ÍÀº Motorola 88K¿¡¼¸¸ Á¤ÀǵȴÙ.
PARM_BOUNDARY
¸¸ÀÏ 0ÀÌ ¾Æ´Ï¶ó¸é, ±×°ÍµéÀ» ½ºÅÿ¡ ³Ö±â Àü¿¡ ¸¹Àº ºñÆ®ÀÇ °æ°è·Î ÀÎÀÚ¸¦ roundÇÑ´Ù.
PRINT_REGISTER_HOOK (regno)
¸¸ÀÏ Á¤ÀǵǾî ÀÖ´Ù¸é, ÀÌ°ÍÀº ÁÖ¾îÁø Ž¯Áö½ºÅÍÀÇ ³»¿ëÀ» Ç¥ÁØ Ãâ·ÂÀ¸·Î Ãâ·ÂÇÏ´Â ÇÔ¼öÀ̾î¾ß ÇÑ´Ù.
PRINT_TYPELESS_INTEGER
print_longest
that seems to
have been defined for the Convex target.
ÀÌ°ÍÀº Convex Ÿ°ÙÀ» À§ÇØ Á¤ÀǵǾî¾ß ÇÏ´Â print_longest
¸¦ À§ÇÑ
¾Ö¸ÅÇÑ ´ëüÇÔ¼öÀÌ´Ù.
PROCESS_LINENUMBER_HOOK
XCOFF Àб⸦ À§ÇØ Á¤ÀÇµÈ ÈÅ.
PROLOGUE_FIRSTLINE_OVERLAP
(Áö¿øµÇÁö ¾Ê´Â Convex ¼³Á¤»çÇ׿¡¼¸¸ »ç¿ëµÈ´Ù.)
PS_REGNUM
¸¸ÀÏ Á¤Àǵȴٸé, ÀÌ°ÍÀº ÇÁ·Î¼¼¼ »óÅ ·¹Áö½ºÅÍÀÇ ¼öÀÌ´Ù. (ÀÌ Á¤ÀÇ´Â "$ps"¸¦ ÆĽÌÇÒ¶§ ÀϹÝÀûÀÎ Äڵ忡¼¸¸ »ç¿ëµÈ´Ù.)
POP_FRAME
ÀÌ°ø ½ºÅà ÇÁ·¹ÀÓÀ» Á¦°ÅÇϱâ À§ÇØ `call_function_by_hand'¿¡¼ »ç¿ëµÇ¸ç ½ÇÁ¦ ½ºÅà ÇÁ·¹ÀÓÀ» Á¦°ÅÇϱâ À§ÇØ `return_command'¿¡¼ »ç¿ëµÈ´Ù.
PUSH_ARGUMENTS (nargs, args, sp, struct_return, struct_addr)
³»ºÎ ÇÔ¼ö È£ÃâÀ» À§ÇÑ ½ºÅÿ¡ ÀÎÀÚµéÀ» ³Ö±â À§ÇØ ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù. °»½ÅµÈ ½ºÅà Æ÷ÀÎÅÍ °ªÀ» ¹ÝȯÇÑ´Ù.
PUSH_DUMMY_FRAME
Àΰø ½ºÅà ÇÁ·¹ÀÓÀ» ¸¸µé±â À§ÇØ `call_function_by_hand'¿¡¼ »ç¿ëµÈ´Ù.
REGISTER_BYTES
¸Ó½Å ·¹Áö½ºÅÍ »óÅÂÀÇ GDB º¹»çº»À» ÀúÀåÇϱâ À§ÇØ ÇÊ¿äÇÑ °ø°£ÀÇ ÃÑ ¾ç.
REGISTER_NAME(i)
NULL
or NUL
to indicate that register i is not valid.
½ºÆ®¸µÀ¸·Î½á ·¹Áö½ºÅÍÀÇ À̸§ i¸¦ ¹ÝȯÇÑ´Ù.
·¹Áö½ºÅÍ i°¡ À¯È¿ÇÏÁö ¾Ê´Ù´Â°ÍÀ» °¡¸®Å°±â À§ÇØ NULL
³ª NUL
À» ¹ÝȯÇÑ´Ù.
REGISTER_NAMES
REGISTER_NAME
.
REGISTER_NAME
´Â ¾ø¾îÁ³´Ù.
REG_STRUCT_HAS_ADDR (gcc_p, type)
¸¸ÀÏ ÁÖ¾îÁø ŸÀÔÀÌ Á÷Á¢º¸´Ù Æ÷ÀÎÅÍ·Î Àü´ÞµÈ´Ù¸é 0À» ¸®ÅÏÇϴ°ÍÀ¸·Î Á¤ÀÇÇÑ´Ù.
SAVE_DUMMY_FRAME_TOS (sp)
SP
after both the dummy frame and space for parameters/results have been allocated on the stack.
³»ºÎ Äڵ忡 Àü´ÞµÉ top-of-stack °ªÀÇ Å¸°Ù ÀÇÁ¸ÀûÀÎ Äڵ带 ÀνÄÇÏ°Ô ÇϱâÀ§ÇØ `call_function_by_hand'¿¡¼ »ç¿ëµÈ´Ù.
ÀÌ°ÍÀº dummy frame°ú °ª/°á°ú¸¦ À§ÇÑ °ø°£ÀÌ ½ºÅÿ¡ ÇÒ´çµÈÈÄ¿¡ SP
ÀÇ °ªÀÌ´Ù.
SDB_REG_TO_REGNUM
sdb ·¹Áö½ºÅÍÀÇ ¼ö¸¦ GDB regnumÀ¸·Î ¹Ù²Ù±â À§ÇØ ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù. ¸¸ÀÏ Á¤ÀǵǾî ÀÖÁö¾Ê´Ù¸é, ¾î¶² º¯Èµµ ÇàÇØÁöÁö ¾Ê´Â´Ù.
SHIFT_INST_REGS
(m88k Ÿ°Ù¿¡¼¸¸ »ç¿ëµÈ´Ù.)
SKIP_PERMANENT_BREAKPOINT
SKIP_PERMANENT_BREAKPOINT
adjusts the processor's state so that execution will resume just after the breakpoint. This
macro does the right thing even when the breakpoint is in the delay slot
of a branch or jump.
³»ºÎ PC´Â ¿µ±¸ breakpoint Àü´ÞÀ» ³ª¾Æ°¡°Ô ÇÑ´Ù.
GDB´Â º¸Åë Á¦°Å½Ã breakpint À§·Î stepÇϸç ÇÑ ¸í·É¾î¸¦ stepÇÏ°í breakpint¸¦
´Ù½Ã »ðÀÔÇÑ´Ù. ±×·¯³ª, ¿µ±¸ breakpoint´Â ³»ºÎ¿¡¼ ¿À·¡°¡°í Á¦°ÅÇÒ¼ö ¾ø´Ù.
±×·¡¼ ÀÌ·¯ÇÑ Àü·«Àº ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù. SKIP_PERMANENT_BREAKPOINT
È£ÃâÀº ÇÁ·Î¼¼¼ »óŸ¦ ¸ÂÃß¸ç ½ÇÇàÀº breakpointÈÄ¿¡ ´Ù½Ã ½ÃÀÛÇÑ´Ù.
ÀÌ ¸ÅÅ©·Î´Â breakpoint°¡ branch³ª jumpÀÇ delay slot¿¡ ÀÖÀ»¶§Á¶Â÷ ÀÛ´çÇÑ °ÍÀÌ´Ù.
SKIP_PROLOGUE (pc)
ÇÔ¼ö ¿£Æ®¸® prologue¸¦ ³Ñ¾î¼± "real" ÄÚµå ÁÖ¼Ò¸¦ ¹ÝȯÇÏ´Â C Ç¥Çö½ÄÀº pc¿¡¼ ¹ß°ßµÈ´Ù.
SKIP_PROLOGUE_FRAMELESS_P
SKIP_PROLOGUE
will be used instead.
C Ç¥Çö½ÄÀº ºñ½ÁÇÏ°Ô ÇൿÇÏÁö¸¸ ÇÔ¼ö°¡ ÇÁ·¹ÀÓÀ» °¡Áö°í Àִ°ÍÀ¸·Î ¾Ë·ÁÁöÀÚ¸¶ÀÚ ¸ØÃâ¼ö ÀÖ´Ù. ¸¸ÀÏ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù¸é, SKIP_PROLOGUE
°¡
´ë½Å »ç¿ëµÈ´Ù.
SKIP_TRAMPOLINE_CODE (pc)
¸¸ÀÏ Å¸°Ù ¸Ó½ÅÀÌ È£ÃâÀÚ¿Í ÇÔ¼ö°¡ È£Ãâ »çÀÌ¿¡ ÀÖ´Â trampoline ÄÚµå¶ó¸é, ±×·¯¸é ½ÇÁ¦ ÇÔ¼öÀÇ ½ÃÀÛÀÎ »õ PC¸¦ ¹ÝȯÇϵµ·Ï ÀÌ ¸ÅÅ©·Î¸¦ Á¤ÀÇÇضó.
SP_REGNUM
¸¸ÀÏ stack pointer°¡ ·¹Áö½ºÅÍ¿¡ À¯ÁöµÈ´Ù¸é, ±×·¯¸é ±× ·¹Áö½ºÅÍÀÇ ¼ö(0º¸´Ù Å©°Å³ª °°°Å³ª)°¡ µÇµµ·Ï ÀÌ ¸ÅÅ©·Î¸¦ Á¤ÀÇÇضó.
This should only need to be defined if TARGET_WRITE_SP
and
TARGET_WRITE_SP
are not defined.
ÀÌ°ÍÀº ¸¸ÀÏ TARGET_WRITE_SP
¿Í TARGET_WRITE_SP
ÀÌ
Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù¸é Á¤ÀÇÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.
STAB_REG_TO_REGNUM
stab ·¹Áö½ºÅÍÀÇ ¼ö("r" ¼±¾ð¿¡¼ °®´Â °Íó·³)¸¦ GDB regnum À¸·Î ¹Ù²Ù±â À§ÇØ ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù. ¸¸ÀÏ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù¸é, ¾î¶°ÇÑ º¯È¯µµ ÇàÇØÁöÁö ¾Ê´Â´Ù.
STACK_ALIGN (addr)
ÁÖ¼Ò¸¦ ÇÁ·Î¼¼¼ ½ºÅÃÀ» ¿ä±¸ÇÏ´Â Á¤·Ä·Î ¸ÂÃß±â À§ÇØ ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù.
STEP_SKIPS_DELAY (addr)
¸¸ÀÏ ÁÖ¼Ò°¡ delay slotÀ» °¡Áø ¸í·É¾î¶ó¸é ÂüÀ» ¹ÝȯÇϵµ·Ï ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù. ¸¸ÀÏ breakpint°¡ ¸í·É¾îÀÇ delay slot¿¡ À§Ä¡ÇØ ÀÖ´Ù¸é, GDB´Â º¸Åë ´Ù½Ã ½ÃÀÛÇϱâ Àü¿¡ ¸í·É¾î¸¦ single-stepÇÑ´Ù. ÇöÀç Mips¿¡¼¸¸ Á¤ÀǵȴÙ.
STORE_RETURN_VALUE (type, valbuf)
C Ç¥Çö½ÄÀº ŸÀÔ typeÀÇ °ªÀ» ¸®ÅÏÇÏ´Â ÇÔ¼ö¸¦ ÀúÀåÇϸç, valbuf´Â ÀúÀåµÇ¾î¾ßÇÏ´Â °ªÀÇ ÁÖ¼ÒÀÌ´Ù.
SUN_FIXED_LBRAC_BUG
(Sun-3°ú Sun-4 Ÿ°Ù¿¡¼¸¸ »ç¿ëµÈ´Ù.)
SYMBOL_RELOADING_DEFAULT
"symbol-reloading" º¯¼öÀÇ ±âº» °ª. (ÇöÀç ¼Ò½º¿¡´Â °áÄÚ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù.)
TARGET_BYTE_ORDER_DEFAULT
BIG_ENDIAN
or LITTLE_ENDIAN
. This macro replaces
TARGET_BYTE_ORDER
which is deprecated.
Ÿ°Ù³» ¹ÙÀÌÆ® ¼ø¼. ÀÌ°ÍÀº BIG_ENDIAN
³ª LITTLE_ENDIAN
À̾î¾ß ÇÑ´Ù. ÀÌ ¸ÅÅ©·Î´Â ¹«½ÃµÇ´Â TARGET_BYTE_ORDER
¸¦ ´ë½ÅÇÑ´Ù.
TARGET_BYTE_ORDER_SELECTABLE_P
BIG_ENDIAN
and
LITTLE_ENDIAN
variants. This macro replaces
TARGET_BYTE_ORDER_SELECTABLE
which is deprecated.
¸¸ÀÏ Å¸°ÙÀÌ BIG_ENDIAN
°ú LITTLE_ENDIAN
º¯Á¾À̶ó¸é
0ÀÌ ¾Æ´Ñ°ªÀÌ´Ù. ÀÌ ¸ÅÅ©·Î´Â ¹«½ÃµÇ´Â TARGET_BYTE_ORDER_SELECTABLE
¸¦ ´ë½ÅÇÑ´Ù.
TARGET_CHAR_BIT
char ºñÆ®ÀÇ ¼ö; ±âº»Àº 8.
TARGET_COMPLEX_BIT
2 * TARGET_FLOAT_BIT
.
At present this macro is not used.
complex ¼ö ºñÆ® ¼ö;±âº»Àº 2 * TARGET_FLOAT_BIT
.
ÇöÀç ÀÌ ¸ÅÅ©·Î´Â »ç¿ëµÇÁö ¾Ê´Â´Ù.
TARGET_DOUBLE_BIT
8 * TARGET_CHAR_BIT
.
double float ºñÆ® ¼ö;±âº»Àº 8 * TARGET_CHAR_BIT
TARGET_DOUBLE_COMPLEX_BIT
2 * TARGET_DOUBLE_BIT
.
At present this macro is not used.
double complex ºñÆ® ¼ö;±âº»Àº 2 * TARGET_DOUBLE_BIT
ÇöÀç ÀÌ ¸ÅÅ©·Î´Â »ç¿ëµÇÁö ¾Ê´Â´Ù.
TARGET_FLOAT_BIT
4 * TARGET_CHAR_BIT
.
float ºñÆ® ¼ö; ±âº»Àº 4 * TARGET_CHAR_BIT
.
TARGET_INT_BIT
4 * TARGET_CHAR_BIT
.
integer ºñÆ® ¼ö;±âº»Àº 4 * TARGET_CHAR_BIT
.
TARGET_LONG_BIT
4 * TARGET_CHAR_BIT
.
long integer ºñÆ® ¼ö;±âº»Àº 4 * TARGET_CHAR_BIT
TARGET_LONG_DOUBLE_BIT
2 * TARGET_DOUBLE_BIT
.
long double float ºñÆ® ¼ö;±âº»Àº 2 * TARGET_DOUBLE_BIT
TARGET_LONG_LONG_BIT
2 * TARGET_LONG_BIT
.
long long integer ºñÆ® ¼ö;±âº»Àº 2 * TARGET_LONG_BIT
TARGET_PTR_BIT
TARGET_INT_BIT
.
Æ÷ÀÎÅÍ ºñÆ® ¼ö;±âº»Àº TARGET_INT_BIT
TARGET_SHORT_BIT
2 * TARGET_CHAR_BIT
.
short integer ºñÆ® ¼ö;±âº»Àº 2 * TARGET_CHAR_BIT
TARGET_READ_PC
TARGET_WRITE_PC (val, pid)
TARGET_READ_SP
TARGET_WRITE_SP
TARGET_READ_FP
TARGET_WRITE_FP
read_pc
, write_pc
,
read_sp
, write_sp
, read_fp
and write_fp
.
For most targets, these may be left undefined. GDB will call the read
and write register functions with the relevant _REGNUM
argument.
À̰͵éÀº read_pc
, write_pc
,
read_sp
, write_sp
, read_fp
and
write_fp
ÀÇ ÇàÀ§¸¦ ¹Ù²Û´Ù.
´ëºÎºÎÀÇ Å¸°ÙÀ» À§ÇØ, À̰͵éÀº Á¤ÀǵÇÁö ¾ÊÀºÃ¤·Î ³²¾Æ ÀÖ´Ù.
GDB´Â _REGNUM
ÀÎÀÚ¿Í °ü·ÃµÇ¾î ÀÐ°í ¾²´Â ·¹Áö½ºÅÍ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
These macros are useful when a target keeps one of these registers in a
hard to get at place; for example, part in a segment register and part
in an ordinary register.
ÀÌµé ¸ÅÅ©·Î´Â Ÿ°ÙÀÌ ÀûÀýÇÏ°Ô °¡Áö±â ¾î·Á¿î ÀÌµé ·¹Áö½ºÅ͵éÁß Çϳª¸¦ À¯ÁöÇÒ¶§ À¯¿ëÇÏ´Ù.;¿¹¸¦ µé¾î, ¼¼±×¸ÕÆ® ·¹Áö½ºÅÍÀÇ ÀÏºÎ¿Í ÀϹÝÀû ·¹Áö½ºÅÍÀÇ ÀϺÎ.
TARGET_VIRTUAL_FRAME_POINTER(pc, regp, offsetp)
(register, offset)
pair representing the virtual
frame pointer in use at the code address pc. If virtual
frame pointers are not used, a default definition simply returns
FP_REGNUM
, with an offset of zero.
ÄÚµå ÁÖ¼Ò pc¿¡¼ »ç¿ëµÇ´Â virtual ÇÁ·¹ÀÓ Æ÷ÀÎÅ͸¦ Ç¥ÇöÇÏ´Â
(register, offset)
½ÖÀ» ¹ÝȯÇÑ´Ù. ¸¸ÀÏ virtual ÇÁ·¹ÀÓ Æ÷ÀÎÅÍ°¡
»ç¿ëµÇÁö ¾Ê´Â´Ù¸é, ±âº» Á¤ÀÇ´Â ´Ü¼øÈ÷ 0ÀÎ offsetÀ» °¡Áö°í FP_REGNUM
¸¦ ¹ÝȯÇÑ´Ù.
TARGET_HAS_HARDWARE_WATCHPOINTS
¸¸ÀÏ 0ÀÌ ¾Æ´Ï¶ó¸é, Ÿ°ÙÀº Çϵå¿þ¾î-°ü·Ã watchpoint¸¦ Áö¿øÇÑ´Ù. ¼¼ºÎ»çÇ×°ú ´Ù¸¥ °ü·Ã ¸ÅÅ©·Î¸¦ À§ÇØ Algorithms ¼½¼ÇÀ» ÂüÁ¶Çضó.
USE_STRUCT_CONVENTION (gcc_p, type)
¸¸ÀÏ Á¤ÀǵǾú´Ù¸é, ÀÌ°ÍÀº ÁÖ¾îÁø type °ªÀÌ ½ºÅÿ¡ ÇÒ´çµÈ °ø°£À» °¡Á®¾ßÇÏ´Â ÇÔ¼ö¿¡¼ ¹ÝȯµÈ´Ù¸é 0ÀÌ ¾Æ´Ñ Ç¥Çö½ÄÀ̾î¾ß ÇÑ´Ù. ¸¸ÀÏ °í·ÁÇÑ ÇÔ¼ö°¡ GCC¿¡ ÀÇÇØ ÄÄÆÄÀϵǾú´Ù¸é gcc_p´Â ÂüÀÌ´Ù.; ÀÌ°ÍÀº GCC´Â ´Ù¸¥ ÄÄÆÄÀÏ·¯º¸´Ù ´Ù¸¥ È£Ãâ º¯È¯À» »ç¿ëÇÑ´Ù°í ¾Ë·ÁÁø ½Ã½ºÅÛ¿¡ À¯¿ëÇÏ´Ù.
VARIABLES_INSIDE_BLOCK (desc, gcc_p)
n_desc
from the
N_RBRAC
symbol, and gcc_p is true if GDB has noticed the presence of either the GCC_COMPILED_SYMBOL
or the
GCC2_COMPILED_SYMBOL
. By default, this is 0.
dbx-style µð¹ö±ë Á¤º¸¸¦ À§ÇØ, ¸¸ÀÏ ÄÄÆÄÀÏ·¯°¡ LBRAC/RBRAC ºí·°³» º¯¼ö ¼±¾ðÀ»
ÇÏ¿´´Ù¸é, ÀÌ°ÍÀº 0ÀÌ ¾Æ´Ñ°ÍÀ¸·Î Á¤ÀÇÇØ¾ß ÇÑ´Ù.
desc°¡ N_RBRAC
½Éº¼¿¡¼ n_desc
°ªÀÌ°í,
¸¸ÀÏ GDB°¡ GCC_COMPILED_SYMBOL
³ª GCC2_COMPILED_SYMBOL
ÀÇ Á¸À縦 ÀνÄÇÑ´Ù¸é gcc_p´Â ÂüÀÌ´Ù.
±âº»ÀûÀ¸·Î, ÀÌ°ÍÀº 0ÀÌ´Ù.
OS9K_VARIABLES_INSIDE_BLOCK (desc, gcc_p)
OS/9000¿¡¼ ºñ½ÁÇÏ´Ù. ±âº»Àº 1.
Motorola M68K target conditionals.
Motorola M68K Ÿ°Ù Á¶°Çµé.
BPT_VECTOR
0xf
.
breakpoint trap vectorÀÇ 4 ºñÆ® À§Ä¡¿¡ ÀÌ°ÍÀ» Á¤ÀÇÇÑ´Ù.
¸¸ÀÏ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù¸é, ±×°ÍÀº 0xf
ÀÌ ±âº»ÀÌ´Ù.
REMOTE_BPT_VECTOR
1
.
±âº»Àº 1.
The following files define a target to GDB:
´ÙÀ½ ÆÄÀϵéÀº GDB¿¡ ´ëÇÑ Å¸°ÙÀ» Á¤ÀÇÇÑ´Ù.:
ÀÌ Å¸°ÙÀ» À§ÇÑ Makefile fragment¸¦ Æ÷ÇÔÇÑ´Ù. ¾î¶² ¿ÀºêÁ§Æ® ÆÄÀÏÀÌ `TDEPFILES=...'¿Í `TDEPLIBS=...'¸¦ Á¤ÀÇÇÑ Å¸°Ù tttÀÌ ÇÊ¿äÇÑÁö¸¦ ÁöÁ¤ÇÑ´Ù. ¶ÇÇÑ `TM_FILE = tm-ttt.h'¸¦ Á¤ÀÇÇÏ¿© ttt¸¦ ±â¼úÇÏ´Â Çì´õ ÆÄÀÏÀ» ÁöÁ¤ÇÑ´Ù. You can also define `TM_CFLAGS', `TM_CLIBS', `TM_CDEPS', but these are now deprecated, replaced by autoconf, and may go away in future versions of GDB.
¿©·¯ºÐÀº `TM_CFLAGS', `TM_CLIBS', `TM_CDEPS'¸¦ Á¤ÀÇÇÑ´Ù. ±×·¯³ª ÇöÀç´Â ¹«½ÃµÇ¸ç autoconf·Î ´ëüµÇ¾ú´Ù. ±×¸®°í GDBÀÇ ³ªÁß ¹öÀü¿¡ ¾ø¾îÁ³´Ù.
configure
). Contains macro definitions about the target machine's registers, stack frame format and instructions.
(`tm.h'´Â configure
°¡ ¸¸µç ÀÌ ÆÄÀÏ¿¡ ´ëÇÑ ¸µÅ©ÀÌ´Ù.)
Ÿ°Ù ¸Ó½Å ·¹Áö½ºÅÍ, ½ºÅà ÇÁ·¹ÀÓ Çü½Ä°ú ¸í·É¾î¿¡ ´ëÇÑ ¸ÅÅ©·Î Á¤ÀǸ¦ Æ÷ÇÔÇÑ´Ù.
ÀÌ Å¸°Ù ¸Ó½Å¿¡ ¿ä±¸µÇ´Â ±âŸ ÄÚµåµéÀ» Æ÷ÇÔÇÑ´Ù. ¸î¸î ¸Ó½Å¿¡¼, ±×°ÍÀº ¸ðµÎ Á¸ÀçÇÏÁö´Â ¾Ê´Â´Ù. °¡²û `tm-ttt.h'³» ¸ÅÅ©·Î´Â ¸Å¿ì º¹ÀâÇØÁ®¼ ´ë½Å ¿©±â ÇÔ¼ö·Î½á ¼öÇàµÇ¸ç ¸ÅÅ©·Î´Â ´Ü¼øÈ÷ ÇÔ¼ö È£ÃâÀ» Á¤ÀÇÇÑ´Ù. ÀÌÇØÈ÷±âµµ µð¹ö±×Çϱ⵵ ½±±â¶§¹®¿¡ ÀÌ°ÍÀº ¸Å¿ì ÁÁ´Ù.
Ÿ°Ù ¸Ó½Å ÇÁ·Î¼¼½º Ĩ(·¹Áö½ºÅÍ, ½ºÅà µî)ÀÇ ±âº» ·¹À̾ƿôÀ» ¼³¸íÇϱâ À§ÇØ Á¸ÀçÇÑ´Ù. ¸¸ÀÏ »ç¿ëµÈ´Ù¸é, `tm-ttt.h'¿¡ ÀÇÇØ Æ÷ÇԵȴÙ. °°Àº ÇÁ·Î¼¼½º¸¦ »ç¿ëÇÏ´Â ¸¹Àº Ÿ°Ùµé»çÀÌ¿¡ °øÀ¯µÈ´Ù.
ºñ½ÁÇÏ°Ô, ÀÌ Æ¯Á¤ ¾ÆÅ°ÅØÃĸ¦ »ç¿ëÇÏ´Â ¸ðµç Ÿ°Ù ¸Ó½Å¿¡ ÀÇÇØ °øÀ¯µÇ´Â ÀϹÝÀû ¼ºê·çƾÀÌ ÀÖ´Ù.
If you are adding a new operating system for an existing CPU chip, add a
`config/tm-os.h' file that describes the operating system facilities that are unusual (extra symbol table info; the breakpoint
instruction needed; etc.). Then write a `arch/tm-os.h'
that just #include
s `tm-arch.h' and
`config/tm-os.h'.
¸¸ÀÏ ¿©·¯ºÐÀÌ Á¸ÀçÇÏ´Â CPU ĨÀ» À§ÇÑ »õ OS¸¦ Ãß°¡ÇÑ´Ù¸é, Ưº°ÇÑ OS ±â´ÉÀ»
±â¼úÇÏ´Â `config/tm-os.h' ÆÄÀÏÀ» Ãß°¡Çضó.
±×¸®°í ´ÜÁö #include
s `tm-arch.h'¿Í `config/tm-os.h'¸¦ Æ÷ÇÔÇÏ´Â `arch/tm-os.h'¸¦ ¾´´Ù.
Go to the first, previous, next, last section, table of contents.