mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-23 19:50:13 +08:00
Add R_X86_64_RELATIVE64 and handle R_X86_64_64 for x32.
bfd/ 2011-08-12 H.J. Lu <hongjiu.lu@intel.com> PR ld/13082 * elf64-x86-64.c (x86_64_elf_howto_table): Add R_X86_64_RELATIVE64. (elf_x86_64_relocate_section): Treat R_X86_64_64 like R_X86_64_32 and zero-extend it to 64bit if addend is zero for x32. Generate R_X86_64_RELATIVE64 for x32. include/elf/ 2011-08-12 H.J. Lu <hongjiu.lu@intel.com> PR ld/13082 * x86-64.h (R_X86_64_RELATIVE64): New. ld/testsuite/ 2011-08-12 H.J. Lu <hongjiu.lu@intel.com> PR ld/13082 * ld-x86-64/pr13082-1.s: New. * ld-x86-64/pr13082-1a.d: Likewise. * ld-x86-64/pr13082-1b.d: Likewise. * ld-x86-64/pr13082-2.s: Likewise. * ld-x86-64/pr13082-2a.d: Likewise. * ld-x86-64/pr13082-2b.d: Likewise. * ld-x86-64/pr13082-3.s: Likewise. * ld-x86-64/pr13082-3a.d: Likewise. * ld-x86-64/pr13082-3b.d: Likewise. * ld-x86-64/pr13082-4.s: Likewise. * ld-x86-64/pr13082-4a.d: Likewise. * ld-x86-64/pr13082-4b.d: Likewise. * ld-x86-64/pr13082-5.s: Likewise. * ld-x86-64/pr13082-5a.d: Likewise. * ld-x86-64/pr13082-5b.d: Likewise. * ld-x86-64/pr13082-6.s: Likewise. * ld-x86-64/pr13082-6a.d: Likewise. * ld-x86-64/pr13082-6b.d: Likewise. * ld-x86-64/x86-64.exp: Run pr13082-[1-6][ab].
This commit is contained in:
@ -1,3 +1,11 @@
|
|||||||
|
2011-08-12 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR ld/13082
|
||||||
|
* elf64-x86-64.c (x86_64_elf_howto_table): Add R_X86_64_RELATIVE64.
|
||||||
|
(elf_x86_64_relocate_section): Treat R_X86_64_64 like R_X86_64_32
|
||||||
|
and zero-extend it to 64bit if addend is zero for x32. Generate
|
||||||
|
R_X86_64_RELATIVE64 for x32.
|
||||||
|
|
||||||
2011-08-09 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
|
2011-08-09 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
|
||||||
|
|
||||||
* bfd-in.h (bfd_elf32_arm_set_target_relocs): Update prototype.
|
* bfd-in.h (bfd_elf32_arm_set_target_relocs): Update prototype.
|
||||||
|
@ -164,6 +164,9 @@ static reloc_howto_type x86_64_elf_howto_table[] =
|
|||||||
HOWTO(R_X86_64_IRELATIVE, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
|
HOWTO(R_X86_64_IRELATIVE, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
|
||||||
bfd_elf_generic_reloc, "R_X86_64_IRELATIVE", FALSE, MINUS_ONE,
|
bfd_elf_generic_reloc, "R_X86_64_IRELATIVE", FALSE, MINUS_ONE,
|
||||||
MINUS_ONE, FALSE),
|
MINUS_ONE, FALSE),
|
||||||
|
HOWTO(R_X86_64_RELATIVE64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
|
||||||
|
bfd_elf_generic_reloc, "R_X86_64_RELATIVE64", FALSE, MINUS_ONE,
|
||||||
|
MINUS_ONE, FALSE),
|
||||||
|
|
||||||
/* We have a gap in the reloc numbers here.
|
/* We have a gap in the reloc numbers here.
|
||||||
R_X86_64_standard counts the number up to this point, and
|
R_X86_64_standard counts the number up to this point, and
|
||||||
@ -3083,6 +3086,16 @@ elf_x86_64_relocate_section (bfd *output_bfd,
|
|||||||
if (info->relocatable)
|
if (info->relocatable)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (rel->r_addend == 0
|
||||||
|
&& r_type == R_X86_64_64
|
||||||
|
&& !ABI_64_P (output_bfd))
|
||||||
|
{
|
||||||
|
/* For x32, treat R_X86_64_64 like R_X86_64_32 and zero-extend
|
||||||
|
it to 64bit if addend is zero. */
|
||||||
|
r_type = R_X86_64_32;
|
||||||
|
memset (contents + rel->r_offset + 4, 0, 4);
|
||||||
|
}
|
||||||
|
|
||||||
/* Since STT_GNU_IFUNC symbol must go through PLT, we handle
|
/* Since STT_GNU_IFUNC symbol must go through PLT, we handle
|
||||||
it here if it is defined in a non-shared object. */
|
it here if it is defined in a non-shared object. */
|
||||||
if (h != NULL
|
if (h != NULL
|
||||||
@ -3597,6 +3610,14 @@ elf_x86_64_relocate_section (bfd *output_bfd,
|
|||||||
outrel.r_info = htab->r_info (0, R_X86_64_RELATIVE);
|
outrel.r_info = htab->r_info (0, R_X86_64_RELATIVE);
|
||||||
outrel.r_addend = relocation + rel->r_addend;
|
outrel.r_addend = relocation + rel->r_addend;
|
||||||
}
|
}
|
||||||
|
else if (r_type == R_X86_64_64
|
||||||
|
&& !ABI_64_P (output_bfd))
|
||||||
|
{
|
||||||
|
relocate = TRUE;
|
||||||
|
outrel.r_info = htab->r_info (0,
|
||||||
|
R_X86_64_RELATIVE64);
|
||||||
|
outrel.r_addend = relocation + rel->r_addend;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
long sindx;
|
long sindx;
|
||||||
|
@ -1,3 +1,27 @@
|
|||||||
|
2011-08-12 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR ld/13082
|
||||||
|
* ld-x86-64/pr13082-1.s: New.
|
||||||
|
* ld-x86-64/pr13082-1a.d: Likewise.
|
||||||
|
* ld-x86-64/pr13082-1b.d: Likewise.
|
||||||
|
* ld-x86-64/pr13082-2.s: Likewise.
|
||||||
|
* ld-x86-64/pr13082-2a.d: Likewise.
|
||||||
|
* ld-x86-64/pr13082-2b.d: Likewise.
|
||||||
|
* ld-x86-64/pr13082-3.s: Likewise.
|
||||||
|
* ld-x86-64/pr13082-3a.d: Likewise.
|
||||||
|
* ld-x86-64/pr13082-3b.d: Likewise.
|
||||||
|
* ld-x86-64/pr13082-4.s: Likewise.
|
||||||
|
* ld-x86-64/pr13082-4a.d: Likewise.
|
||||||
|
* ld-x86-64/pr13082-4b.d: Likewise.
|
||||||
|
* ld-x86-64/pr13082-5.s: Likewise.
|
||||||
|
* ld-x86-64/pr13082-5a.d: Likewise.
|
||||||
|
* ld-x86-64/pr13082-5b.d: Likewise.
|
||||||
|
* ld-x86-64/pr13082-6.s: Likewise.
|
||||||
|
* ld-x86-64/pr13082-6a.d: Likewise.
|
||||||
|
* ld-x86-64/pr13082-6b.d: Likewise.
|
||||||
|
|
||||||
|
* ld-x86-64/x86-64.exp: Run pr13082-[1-6][ab].
|
||||||
|
|
||||||
2011-08-09 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
|
2011-08-09 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
|
||||||
|
|
||||||
* ld-arm/arm-elf.exp (armelftests): Update for new command-line
|
* ld-arm/arm-elf.exp (armelftests): Update for new command-line
|
||||||
|
10
ld/testsuite/ld-x86-64/pr13082-1.s
Normal file
10
ld/testsuite/ld-x86-64/pr13082-1.s
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
.text
|
||||||
|
.globl _start
|
||||||
|
_start:
|
||||||
|
lea .Ljmp(%rip), %rax
|
||||||
|
.L1:
|
||||||
|
jmp *(%rax)
|
||||||
|
.section .data.rel.ro.local,"aw",@progbits
|
||||||
|
.align 8
|
||||||
|
.Ljmp:
|
||||||
|
.quad .L1
|
9
ld/testsuite/ld-x86-64/pr13082-1a.d
Normal file
9
ld/testsuite/ld-x86-64/pr13082-1a.d
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#source: pr13082-1.s
|
||||||
|
#name: PR ld/13082-1 (a)
|
||||||
|
#as: --x32
|
||||||
|
#ld: -shared -melf32_x86_64
|
||||||
|
#readelf: -r --wide
|
||||||
|
|
||||||
|
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE64 +[0-9a-f]+
|
9
ld/testsuite/ld-x86-64/pr13082-1b.d
Normal file
9
ld/testsuite/ld-x86-64/pr13082-1b.d
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#source: pr13082-1.s
|
||||||
|
#name: PR ld/13082-1 (b)
|
||||||
|
#as: --x32
|
||||||
|
#ld: -pie -melf32_x86_64
|
||||||
|
#readelf: -r --wide
|
||||||
|
|
||||||
|
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE64 +[0-9a-f]+
|
9
ld/testsuite/ld-x86-64/pr13082-2.s
Normal file
9
ld/testsuite/ld-x86-64/pr13082-2.s
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
.text
|
||||||
|
.globl _start
|
||||||
|
_start:
|
||||||
|
lea .Ljmp(%rip), %rax
|
||||||
|
jmp *(%rax)
|
||||||
|
.section .data.rel.ro.local,"aw",@progbits
|
||||||
|
.align 8
|
||||||
|
.Ljmp:
|
||||||
|
.quad _start
|
9
ld/testsuite/ld-x86-64/pr13082-2a.d
Normal file
9
ld/testsuite/ld-x86-64/pr13082-2a.d
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#source: pr13082-2.s
|
||||||
|
#name: PR ld/13082-2 (a)
|
||||||
|
#as: --x32
|
||||||
|
#ld: -shared -melf32_x86_64
|
||||||
|
#readelf: -r --wide
|
||||||
|
|
||||||
|
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +[0-9a-f]+ +_start \+ 0
|
9
ld/testsuite/ld-x86-64/pr13082-2b.d
Normal file
9
ld/testsuite/ld-x86-64/pr13082-2b.d
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#source: pr13082-2.s
|
||||||
|
#name: PR ld/13082-2 (b)
|
||||||
|
#as: --x32
|
||||||
|
#ld: -pie -melf32_x86_64
|
||||||
|
#readelf: -r --wide
|
||||||
|
|
||||||
|
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE +[0-9a-f]+
|
10
ld/testsuite/ld-x86-64/pr13082-3.s
Normal file
10
ld/testsuite/ld-x86-64/pr13082-3.s
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
.text
|
||||||
|
.globl _start
|
||||||
|
_start:
|
||||||
|
lea .Ljmp(%rip), %rax
|
||||||
|
jmp *(%rax)
|
||||||
|
.section .data.rel.ro.local,"aw",@progbits
|
||||||
|
.weak func
|
||||||
|
.align 8
|
||||||
|
.Ljmp:
|
||||||
|
.quad func
|
9
ld/testsuite/ld-x86-64/pr13082-3a.d
Normal file
9
ld/testsuite/ld-x86-64/pr13082-3a.d
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#source: pr13082-3.s
|
||||||
|
#name: PR ld/13082-3 (a)
|
||||||
|
#as: --x32
|
||||||
|
#ld: -shared -melf32_x86_64
|
||||||
|
#readelf: -r --wide
|
||||||
|
|
||||||
|
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +[0-9a-f]+ +func \+ 0
|
9
ld/testsuite/ld-x86-64/pr13082-3b.d
Normal file
9
ld/testsuite/ld-x86-64/pr13082-3b.d
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#source: pr13082-3.s
|
||||||
|
#name: PR ld/13082-3 (b)
|
||||||
|
#as: --x32
|
||||||
|
#ld: -pie -melf32_x86_64
|
||||||
|
#readelf: -r --wide
|
||||||
|
|
||||||
|
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +[0-9a-f]+ +func \+ 0
|
10
ld/testsuite/ld-x86-64/pr13082-4.s
Normal file
10
ld/testsuite/ld-x86-64/pr13082-4.s
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
.text
|
||||||
|
.globl _start
|
||||||
|
_start:
|
||||||
|
lea .Ljmp(%rip), %rax
|
||||||
|
jmp *(%rax)
|
||||||
|
.section .data.rel.ro.local,"aw",@progbits
|
||||||
|
.weak func
|
||||||
|
.align 8
|
||||||
|
.Ljmp:
|
||||||
|
.quad func + 1
|
9
ld/testsuite/ld-x86-64/pr13082-4a.d
Normal file
9
ld/testsuite/ld-x86-64/pr13082-4a.d
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#source: pr13082-4.s
|
||||||
|
#name: PR ld/13082-4 (a)
|
||||||
|
#as: --x32
|
||||||
|
#ld: -shared -melf32_x86_64
|
||||||
|
#readelf: -r --wide
|
||||||
|
|
||||||
|
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_64 +[0-9a-f]+ +func \+ 1
|
9
ld/testsuite/ld-x86-64/pr13082-4b.d
Normal file
9
ld/testsuite/ld-x86-64/pr13082-4b.d
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#source: pr13082-4.s
|
||||||
|
#name: PR ld/13082-4 (b)
|
||||||
|
#as: --x32
|
||||||
|
#ld: -pie -melf32_x86_64
|
||||||
|
#readelf: -r --wide
|
||||||
|
|
||||||
|
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_64 +[0-9a-f]+ +func \+ 1
|
12
ld/testsuite/ld-x86-64/pr13082-5.s
Normal file
12
ld/testsuite/ld-x86-64/pr13082-5.s
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
.text
|
||||||
|
.globl _start
|
||||||
|
.globl ifunc
|
||||||
|
.type ifunc, @gnu_indirect_function
|
||||||
|
_start:
|
||||||
|
lea .Ljmp(%rip), %rax
|
||||||
|
ifunc:
|
||||||
|
jmp *(%rax)
|
||||||
|
.section .data.rel.ro.local,"aw",@progbits
|
||||||
|
.align 8
|
||||||
|
.Ljmp:
|
||||||
|
.quad ifunc
|
14
ld/testsuite/ld-x86-64/pr13082-5a.d
Normal file
14
ld/testsuite/ld-x86-64/pr13082-5a.d
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#source: pr13082-5.s
|
||||||
|
#name: PR ld/13082-5 (a)
|
||||||
|
#as: --x32
|
||||||
|
#ld: -shared -melf32_x86_64
|
||||||
|
#readelf: -r --wide
|
||||||
|
|
||||||
|
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +ifunc\(\)+ +ifunc \+ 0
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_GLOB_DAT +ifunc\(\)+ +ifunc \+ 0
|
||||||
|
|
||||||
|
Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_JUMP_SLOT +ifunc\(\)+ +ifunc \+ 0
|
13
ld/testsuite/ld-x86-64/pr13082-5b.d
Normal file
13
ld/testsuite/ld-x86-64/pr13082-5b.d
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#source: pr13082-5.s
|
||||||
|
#name: PR ld/13082-5 (b)
|
||||||
|
#as: --x32
|
||||||
|
#ld: -pie -melf32_x86_64
|
||||||
|
#readelf: -r --wide
|
||||||
|
|
||||||
|
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_IRELATIVE +[0-9a-f]+
|
||||||
|
|
||||||
|
Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_IRELATIVE +[0-9a-f]+
|
11
ld/testsuite/ld-x86-64/pr13082-6.s
Normal file
11
ld/testsuite/ld-x86-64/pr13082-6.s
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
.text
|
||||||
|
.globl _start
|
||||||
|
.type ifunc, @gnu_indirect_function
|
||||||
|
_start:
|
||||||
|
lea .Ljmp(%rip), %rax
|
||||||
|
ifunc:
|
||||||
|
jmp *(%rax)
|
||||||
|
.section .data.rel.ro.local,"aw",@progbits
|
||||||
|
.align 8
|
||||||
|
.Ljmp:
|
||||||
|
.quad ifunc
|
13
ld/testsuite/ld-x86-64/pr13082-6a.d
Normal file
13
ld/testsuite/ld-x86-64/pr13082-6a.d
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#source: pr13082-6.s
|
||||||
|
#name: PR ld/13082-6 (a)
|
||||||
|
#as: --x32
|
||||||
|
#ld: -shared -melf32_x86_64
|
||||||
|
#readelf: -r --wide
|
||||||
|
|
||||||
|
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_IRELATIVE +[0-9a-f]+
|
||||||
|
|
||||||
|
Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_IRELATIVE +[0-9a-f]+
|
13
ld/testsuite/ld-x86-64/pr13082-6b.d
Normal file
13
ld/testsuite/ld-x86-64/pr13082-6b.d
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#source: pr13082-6.s
|
||||||
|
#name: PR ld/13082-6 (b)
|
||||||
|
#as: --x32
|
||||||
|
#ld: -pie -melf32_x86_64
|
||||||
|
#readelf: -r --wide
|
||||||
|
|
||||||
|
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_IRELATIVE +[0-9a-f]+
|
||||||
|
|
||||||
|
Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||||
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_IRELATIVE +[0-9a-f]+
|
@ -213,6 +213,18 @@ run_dump_test "ia32-3"
|
|||||||
run_dump_test "lp64-1"
|
run_dump_test "lp64-1"
|
||||||
run_dump_test "lp64-2"
|
run_dump_test "lp64-2"
|
||||||
run_dump_test "lp64-3"
|
run_dump_test "lp64-3"
|
||||||
|
run_dump_test "pr13082-1a"
|
||||||
|
run_dump_test "pr13082-1b"
|
||||||
|
run_dump_test "pr13082-2a"
|
||||||
|
run_dump_test "pr13082-2b"
|
||||||
|
run_dump_test "pr13082-3a"
|
||||||
|
run_dump_test "pr13082-3b"
|
||||||
|
run_dump_test "pr13082-4a"
|
||||||
|
run_dump_test "pr13082-4b"
|
||||||
|
run_dump_test "pr13082-5a"
|
||||||
|
run_dump_test "pr13082-5b"
|
||||||
|
run_dump_test "pr13082-6a"
|
||||||
|
run_dump_test "pr13082-6b"
|
||||||
|
|
||||||
# Must be native with the C compiler
|
# Must be native with the C compiler
|
||||||
if { [isnative] && [which $CC] != 0 } {
|
if { [isnative] && [which $CC] != 0 } {
|
||||||
|
Reference in New Issue
Block a user