Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

R_CUDA Relocation Types

Addresses apply to ptxas v13.0.88 (CUDA 13.0). VA base 0x400000 (non-PIE).

The complete R_CUDA_* relocation enumeration ptxas emits into SASS cubins, re-extracted from the binary's name-pointer table at VMA 0x23FD4C0 (stride 16 B, 117 entries 0..116, terminating on the first NULL pointer) and the parallel action-record table at file offset 0x2000080 (64 B stride). Each entry's name maps 1:1 to its ELF relocation type code (the abi_value column). Column meanings:

  • handler — the resolver class from the action table's handler field: NVRH_LINKER (nvlink resolves), NVRH_DRIVER (CUDA driver resolves), NVRH_EITHER (linker or driver), NVRH_NONE (no action).
  • bit actions — the SASS instruction-word field each reloc patches: bits[a..b]=VALUE>>shift.

Codes 114 and 115 are present only in this build; R_CUDA_NONE_LAST sits at 116.

CodeNameHandlerBit actions
0R_CUDA_NONENVRH_NONE(none)
1R_CUDA_32NVRH_EITHERbits[0..31]=ADDR>>0
2R_CUDA_64NVRH_EITHERbits[0..63]=ADDR>>0
3R_CUDA_G32NVRH_DRIVERbits[0..31]=GADDR>>0
4R_CUDA_G64NVRH_DRIVERbits[0..63]=GADDR>>0
5R_CUDA_ABS32_26NVRH_EITHERbits[26..57]=ADDR>>0
6R_CUDA_TEX_HEADER_INDEXNVRH_DRIVERbits[0..19]=HEADER>>0
7R_CUDA_SAMP_HEADER_INDEXNVRH_DRIVERbits[20..31]=HEADER>>0
8R_CUDA_SURF_HW_DESCNVRH_DRIVERbits[0..31]=HWDESC>>0
9R_CUDA_SURF_HW_SW_DESCNVRH_DRIVERbits[0..31]=HWSWDESC>>0
10R_CUDA_ABS32_LO_26NVRH_EITHERbits[26..57]=LOADDR>>0
11R_CUDA_ABS32_HI_26NVRH_EITHERbits[26..57]=HIADDR>>32
12R_CUDA_ABS32_23NVRH_EITHERbits[23..54]=ADDR>>0
13R_CUDA_ABS32_LO_23NVRH_EITHERbits[23..54]=LOADDR>>0
14R_CUDA_ABS32_HI_23NVRH_EITHERbits[23..54]=HIADDR>>32
15R_CUDA_ABS24_26NVRH_LINKERbits[26..49]=ADDR>>0
16R_CUDA_ABS24_23NVRH_LINKERbits[23..46]=ADDR>>0
17R_CUDA_ABS16_26NVRH_LINKERbits[26..41]=ADDR>>0
18R_CUDA_ABS16_23NVRH_LINKERbits[23..38]=ADDR>>0
19R_CUDA_TEX_SLOTNVRH_LINKERbits[32..39]=SLOT>>0
20R_CUDA_SAMP_SLOTNVRH_LINKERbits[40..44]=SLOT>>0
21R_CUDA_SURF_SLOTNVRH_LINKERbits[26..31]=SLOT>>0
22R_CUDA_TEX_BINDLESSOFF13_32NVRH_LINKERbits[32..44]=SHIFT2>>0
23R_CUDA_TEX_BINDLESSOFF13_47NVRH_LINKERbits[47..59]=SHIFT2>>0
24R_CUDA_CONST_FIELD19_28NVRH_LINKERbits[28..41]=SHIFT2>>0 ; bits[42..45]=CBANK>>0 ; bits[26..26]=CBANK4>>0
25R_CUDA_CONST_FIELD19_23NVRH_LINKERbits[23..36]=SHIFT2>>0 ; bits[37..41]=CBANK>>0
26R_CUDA_TEX_SLOT9_49NVRH_LINKERbits[49..57]=SLOT>>0
27R_CUDA_6_31NVRH_LINKERbits[31..36]=ADDR>>0
28R_CUDA_2_47NVRH_LINKERbits[47..48]=ADDR>>0
29R_CUDA_TEX_BINDLESSOFF13_41NVRH_LINKERbits[41..53]=SHIFT2>>0
30R_CUDA_TEX_BINDLESSOFF13_45NVRH_LINKERbits[45..57]=SHIFT2>>0
31R_CUDA_FUNC_DESC32_23NVRH_DRIVERbits[23..54]=FDESC>>0
32R_CUDA_FUNC_DESC32_LO_23NVRH_DRIVERbits[23..54]=LOFDESC>>0
33R_CUDA_FUNC_DESC32_HI_23NVRH_DRIVERbits[23..54]=HIFDESC>>32
34R_CUDA_FUNC_DESC_32NVRH_DRIVERbits[0..31]=FDESCA>>0
35R_CUDA_FUNC_DESC_64NVRH_DRIVERbits[0..63]=FDESCA>>0
36R_CUDA_CONST_FIELD21_26NVRH_LINKERbits[26..41]=ADDR>>0 ; bits[42..46]=CBANK>>0
37R_CUDA_QUERY_DESC21_37NVRH_LINKERbits[37..52]=ADDR>>0 ; bits[53..57]=CBANK>>0
38R_CUDA_CONST_FIELD19_26NVRH_LINKERbits[26..39]=SHIFT2>>0 ; bits[40..44]=CBANK>>0
39R_CUDA_CONST_FIELD21_23NVRH_LINKERbits[23..38]=ADDR>>0 ; bits[39..43]=CBANK>>0
40R_CUDA_PCREL_IMM24_26NVRH_LINKERbits[26..49]=PCREL>>0
41R_CUDA_PCREL_IMM24_23NVRH_LINKERbits[23..46]=PCREL>>0
42R_CUDA_ABS32_20NVRH_EITHERbits[20..51]=ADDR>>0
43R_CUDA_ABS32_LO_20NVRH_EITHERbits[20..51]=LOADDR>>0
44R_CUDA_ABS32_HI_20NVRH_EITHERbits[20..51]=HIADDR>>32
45R_CUDA_ABS24_20NVRH_LINKERbits[20..43]=ADDR>>0
46R_CUDA_ABS16_20NVRH_LINKERbits[20..35]=ADDR>>0
47R_CUDA_FUNC_DESC32_20NVRH_DRIVERbits[20..51]=FDESC>>0
48R_CUDA_FUNC_DESC32_LO_20NVRH_DRIVERbits[20..51]=LOFDESC>>0
49R_CUDA_FUNC_DESC32_HI_20NVRH_DRIVERbits[20..51]=HIFDESC>>32
50R_CUDA_CONST_FIELD19_20NVRH_LINKERbits[20..33]=SHIFT2>>0 ; bits[34..38]=CBANK>>0
51R_CUDA_BINDLESSOFF13_36NVRH_LINKERbits[36..48]=SHIFT2>>0
52R_CUDA_SURF_HEADER_INDEXNVRH_DRIVERbits[0..19]=HEADER>>0
53R_CUDA_INSTRUCTION64NVRH_DRIVERbits[0..63]=INST>>0
54R_CUDA_CONST_FIELD21_20NVRH_LINKERbits[20..35]=ADDR>>0 ; bits[36..40]=CBANK>>0
55R_CUDA_ABS32_32NVRH_EITHERbits[32..63]=ADDR>>0
56R_CUDA_ABS32_LO_32NVRH_EITHERbits[32..63]=LOADDR>>0
57R_CUDA_ABS32_HI_32NVRH_EITHERbits[32..63]=HIADDR>>32
58R_CUDA_ABS47_34NVRH_DRIVERbits[34..80]=SHIFT2>>0
59R_CUDA_ABS16_32NVRH_LINKERbits[32..47]=ADDR>>0
60R_CUDA_ABS24_32NVRH_LINKERbits[32..55]=ADDR>>0
61R_CUDA_FUNC_DESC32_32NVRH_DRIVERbits[32..63]=FDESC>>0
62R_CUDA_FUNC_DESC32_LO_32NVRH_DRIVERbits[32..63]=LOFDESC>>0
63R_CUDA_FUNC_DESC32_HI_32NVRH_DRIVERbits[32..63]=HIFDESC>>32
64R_CUDA_CONST_FIELD19_40NVRH_LINKERbits[40..53]=SHIFT2>>0 ; bits[54..58]=CBANK>>0
65R_CUDA_BINDLESSOFF14_40NVRH_LINKERbits[40..53]=SHIFT2>>0
66R_CUDA_CONST_FIELD21_38NVRH_LINKERbits[38..53]=ADDR>>0 ; bits[54..58]=CBANK>>0
67R_CUDA_INSTRUCTION128NVRH_DRIVERbits[0..127]=INST>>0
68R_CUDA_YIELD_OPCODE9_0NVRH_LINKERbits[0..8]=INST_OPCODE>>0
69R_CUDA_YIELD_CLEAR_PRED4_87NVRH_LINKERbits[87..90]=INST_FIELD_CLEAR>>0
70R_CUDA_32_LONVRH_EITHERbits[0..31]=LOADDR>>0
71R_CUDA_32_HINVRH_EITHERbits[0..31]=HIADDR>>32
72R_CUDA_UNUSED_CLEAR32NVRH_LINKERbits[0..31]=CLEAR>>0
73R_CUDA_UNUSED_CLEAR64NVRH_LINKERbits[0..63]=CLEAR>>0
74R_CUDA_ABS24_40NVRH_LINKERbits[40..63]=ADDR>>0
75R_CUDA_ABS55_16_34NVRH_DRIVERbits[16..23]=SHIFT2>>2 ; bits[34..80]=SHIFT8>>10
76R_CUDA_8_0NVRH_EITHERbits[0..7]=ADDR8_0>>0
77R_CUDA_8_8NVRH_EITHERbits[0..7]=ADDR8_8>>8
78R_CUDA_8_16NVRH_EITHERbits[0..7]=ADDR8_16>>16
79R_CUDA_8_24NVRH_EITHERbits[0..7]=ADDR8_24>>24
80R_CUDA_8_32NVRH_EITHERbits[0..7]=ADDR8_32>>32
81R_CUDA_8_40NVRH_EITHERbits[0..7]=ADDR8_40>>40
82R_CUDA_8_48NVRH_EITHERbits[0..7]=ADDR8_48>>48
83R_CUDA_8_56NVRH_EITHERbits[0..7]=ADDR8_56>>56
84R_CUDA_G8_0NVRH_DRIVERbits[0..7]=GADDR8_0>>0
85R_CUDA_G8_8NVRH_DRIVERbits[0..7]=GADDR8_8>>8
86R_CUDA_G8_16NVRH_DRIVERbits[0..7]=GADDR8_16>>16
87R_CUDA_G8_24NVRH_DRIVERbits[0..7]=GADDR8_24>>24
88R_CUDA_G8_32NVRH_DRIVERbits[0..7]=GADDR8_32>>32
89R_CUDA_G8_40NVRH_DRIVERbits[0..7]=GADDR8_40>>40
90R_CUDA_G8_48NVRH_DRIVERbits[0..7]=GADDR8_48>>48
91R_CUDA_G8_56NVRH_DRIVERbits[0..7]=GADDR8_56>>56
92R_CUDA_FUNC_DESC_8_0NVRH_DRIVERbits[0..7]=FDESC8_0>>0
93R_CUDA_FUNC_DESC_8_8NVRH_DRIVERbits[0..7]=FDESC8_8>>8
94R_CUDA_FUNC_DESC_8_16NVRH_DRIVERbits[0..7]=FDESC8_16>>16
95R_CUDA_FUNC_DESC_8_24NVRH_DRIVERbits[0..7]=FDESC8_24>>24
96R_CUDA_FUNC_DESC_8_32NVRH_DRIVERbits[0..7]=FDESC8_32>>32
97R_CUDA_FUNC_DESC_8_40NVRH_DRIVERbits[0..7]=FDESC8_40>>40
98R_CUDA_FUNC_DESC_8_48NVRH_DRIVERbits[0..7]=FDESC8_48>>48
99R_CUDA_FUNC_DESC_8_56NVRH_DRIVERbits[0..7]=FDESC8_56>>56
100R_CUDA_ABS20_44NVRH_LINKERbits[44..63]=ADDR>>0
101R_CUDA_SAMP_HEADER_INDEX_0NVRH_DRIVERbits[0..11]=HEADER>>0
102R_CUDA_UNIFIEDNVRH_DRIVERbits[0..63]=UADDR>>0
103R_CUDA_UNIFIED_32NVRH_DRIVERbits[0..31]=UADDR>>0
104R_CUDA_UNIFIED_8_0NVRH_DRIVERbits[0..7]=UADDR8_0>>0
105R_CUDA_UNIFIED_8_8NVRH_DRIVERbits[0..7]=UADDR8_8>>8
106R_CUDA_UNIFIED_8_16NVRH_DRIVERbits[0..7]=UADDR8_16>>16
107R_CUDA_UNIFIED_8_24NVRH_DRIVERbits[0..7]=UADDR8_24>>24
108R_CUDA_UNIFIED_8_32NVRH_DRIVERbits[0..7]=UADDR8_32>>32
109R_CUDA_UNIFIED_8_40NVRH_DRIVERbits[0..7]=UADDR8_40>>40
110R_CUDA_UNIFIED_8_48NVRH_DRIVERbits[0..7]=UADDR8_48>>48
111R_CUDA_UNIFIED_8_56NVRH_DRIVERbits[0..7]=UADDR8_56>>56
112R_CUDA_UNIFIED32_LO_32NVRH_DRIVERbits[32..63]=LOUADDR>>0
113R_CUDA_UNIFIED32_HI_32NVRH_DRIVERbits[32..63]=HIUADDR>>32
114R_CUDA_ABS56_16_34NVRH_DRIVERbits[16..23]=SHIFT2>>2 ; bits[34..81]=SHIFT8>>10
115R_CUDA_CONST_FIELD22_37NVRH_LINKERbits[37..53]=ADDR>>0 ; bits[54..58]=CBANK>>0
116R_CUDA_NONE_LASTNVRH_NONE(none)

Handler distribution

The handler field is decoded directly from the action-record table. In this build the enum is 0=NVRH_NONE, 1=NVRH_LINKER (nvlink — 39 R_CUDA_* types), 2=NVRH_DRIVER (CUDA runtime/driver — 52 types), 3=NVRH_FINALIZER (no R_CUDA_* type uses it — it is reserved for the Mercury PROG_REL* family), 4=NVRH_EITHER (linker-or-driver — 24 types). Older ptxas builds used a four-value enum {NONE, LINKER, DRIVER, EITHER}=0..3; this build inserts FINALIZER at value 3 and pushes EITHER to 4, so the bracketed numeric values shifted even though the semantic class names above are stable.