diff options
author | Mike Pall <mike> | 2011-10-24 16:20:04 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2011-10-24 16:20:04 +0200 |
commit | 826fb377ecbe804a7ae934876b0dc074d93f6c46 (patch) | |
tree | 36c5632034bebc23cbd5ccde48c59fa50b8429ed /src | |
parent | 3591609dad5ac7179f67f799751265a91825406d (diff) | |
download | luajit-826fb377ecbe804a7ae934876b0dc074d93f6c46.tar.gz luajit-826fb377ecbe804a7ae934876b0dc074d93f6c46.tar.bz2 luajit-826fb377ecbe804a7ae934876b0dc074d93f6c46.zip |
PPC: Add support for GDB JIT API.
Diffstat (limited to 'src')
-rw-r--r-- | src/lj_gdbjit.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/lj_gdbjit.c b/src/lj_gdbjit.c index acbe429a..130ab991 100644 --- a/src/lj_gdbjit.c +++ b/src/lj_gdbjit.c | |||
@@ -232,8 +232,10 @@ enum { | |||
232 | 232 | ||
233 | enum { | 233 | enum { |
234 | DW_CFA_nop = 0x0, | 234 | DW_CFA_nop = 0x0, |
235 | DW_CFA_offset_extended = 0x5, | ||
235 | DW_CFA_def_cfa = 0xc, | 236 | DW_CFA_def_cfa = 0xc, |
236 | DW_CFA_def_cfa_offset = 0xe, | 237 | DW_CFA_def_cfa_offset = 0xe, |
238 | DW_CFA_offset_extended_sf = 0x11, | ||
237 | DW_CFA_advance_loc = 0x40, | 239 | DW_CFA_advance_loc = 0x40, |
238 | DW_CFA_offset = 0x80 | 240 | DW_CFA_offset = 0x80 |
239 | }; | 241 | }; |
@@ -292,6 +294,10 @@ enum { | |||
292 | #elif LJ_TARGET_ARM | 294 | #elif LJ_TARGET_ARM |
293 | DW_REG_SP = 13, | 295 | DW_REG_SP = 13, |
294 | DW_REG_RA = 14, | 296 | DW_REG_RA = 14, |
297 | #elif LJ_TARGET_PPC | ||
298 | DW_REG_SP = 1, | ||
299 | DW_REG_RA = 65, | ||
300 | DW_REG_CR = 70, | ||
295 | #else | 301 | #else |
296 | #error "Unsupported target architecture" | 302 | #error "Unsupported target architecture" |
297 | #endif | 303 | #endif |
@@ -361,6 +367,8 @@ static const ELFheader elfhdr_template = { | |||
361 | .machine = 62, | 367 | .machine = 62, |
362 | #elif LJ_TARGET_ARM | 368 | #elif LJ_TARGET_ARM |
363 | .machine = 40, | 369 | .machine = 40, |
370 | #elif LJ_TARGET_PPC | ||
371 | .machine = 20, | ||
364 | #else | 372 | #else |
365 | #error "Unsupported target architecture" | 373 | #error "Unsupported target architecture" |
366 | #endif | 374 | #endif |
@@ -523,7 +531,11 @@ static void LJ_FASTCALL gdbjit_ehframe(GDBJITctx *ctx) | |||
523 | DB(DW_REG_RA); /* Return address register. */ | 531 | DB(DW_REG_RA); /* Return address register. */ |
524 | DB(1); DB(DW_EH_PE_textrel|DW_EH_PE_udata4); /* Augmentation data. */ | 532 | DB(1); DB(DW_EH_PE_textrel|DW_EH_PE_udata4); /* Augmentation data. */ |
525 | DB(DW_CFA_def_cfa); DUV(DW_REG_SP); DUV(sizeof(uintptr_t)); | 533 | DB(DW_CFA_def_cfa); DUV(DW_REG_SP); DUV(sizeof(uintptr_t)); |
534 | #if LJ_TARGET_PPC | ||
535 | DB(DW_CFA_offset_extended_sf); DB(DW_REG_RA); DSV(-1); | ||
536 | #else | ||
526 | DB(DW_CFA_offset|DW_REG_RA); DUV(1); | 537 | DB(DW_CFA_offset|DW_REG_RA); DUV(1); |
538 | #endif | ||
527 | DALIGNNOP(sizeof(uintptr_t)); | 539 | DALIGNNOP(sizeof(uintptr_t)); |
528 | ) | 540 | ) |
529 | 541 | ||
@@ -550,10 +562,19 @@ static void LJ_FASTCALL gdbjit_ehframe(GDBJITctx *ctx) | |||
550 | #elif LJ_TARGET_ARM | 562 | #elif LJ_TARGET_ARM |
551 | { | 563 | { |
552 | int i; | 564 | int i; |
565 | DB(DW_CFA_offset_extended); DB(DW_REG_CR); DUV(55); | ||
553 | for (i = 11; i >= 4; i--) { /* R4-R11. */ | 566 | for (i = 11; i >= 4; i--) { /* R4-R11. */ |
554 | DB(DW_CFA_offset|i); DUV(2+(11-i)); | 567 | DB(DW_CFA_offset|i); DUV(2+(11-i)); |
555 | } | 568 | } |
556 | } | 569 | } |
570 | #elif LJ_TARGET_PPC | ||
571 | { | ||
572 | int i; | ||
573 | for (i = 14; i <= 31; i++) { | ||
574 | DB(DW_CFA_offset|i); DUV(37+(31-i)); | ||
575 | DB(DW_CFA_offset|32|i); DUV(2+2*(31-i)); | ||
576 | } | ||
577 | } | ||
557 | #else | 578 | #else |
558 | #error "Unsupported target architecture" | 579 | #error "Unsupported target architecture" |
559 | #endif | 580 | #endif |