Ah, I see, there are still a few left in the runtime. The runtime forces
optimizations on even when -N is used.
So no, I don't think you can do what you want (without hacking the compiler
to turn jump tables off completely.)
On Monday, December 2, 2024 at 2:25:22 AM UTC-8 Karolina GORNA wrote:
> Hello Keith,
>
> Thank you for your curiosity.
>
> This is the procedure I follow :
>
> 1. I have written the test program main.go below in the directory
> switch-go
> 2. I use the command *GOARCH=amd64 GOOS=linux go build
> -gcflags=all='-N -l' . *with "go version go1.23.3 linux/amd64".
> 3. I open the produced binary switch-go in the emulator tool of
> Ghidra, selecting the Golang compiler and launching the default analysis.
> 4. In the Symbol Tree, I search for "switch" key world, and I find
> switch tables in the .rodata section, which are actually the jump tables I
> don't want to have.
>
> Following the same procedure with go1.23.3 linux/amd64 and
> GCCGO 14.2.0 (Ubuntu 14.2.0-4ubuntu2~24.04) , but with the command
> *GOARCH=amd64
> GOOS=linux go build -buildvcs=false -compiler=gccgo
> -gccgoflags='-fno-jump-tables' . *, I don't have any switch tables (more
> precisely, jump tables) in the .rodata section (where there are supposed to
> be if they exist). But again, GCCGO currently doesn't support
> functionalities for Go above 1.18.
>
> Best,
> Karolina
>
> PS : I know I don't need to specify *GOARCH=amd64 GOOS=linux *in the
> command but I have included them for the purpose of this debugging
> discussion.
>
>
> *switch-go/main.go*----------------------------------------------
> package main
>
> import "fmt"
>
> func main() {
> x := 10
> switch x {
> case 1:
> fmt.Println("One")
> case 5:
> fmt.Println("Five")
> case 10:
> fmt.Println("Ten")
> default:
> fmt.Println("Other")
> }
> }
> ----------------------------------------------
> On Saturday, November 30, 2024 at 2:16:20 AM UTC+1 Keith Randall wrote:
>
>> Hmm, that's strange. I am not seeing that behavior.
>> Could you paste the *exact* commands you used to build your program here?
>> Include GOARCH, GOOS, Go version, and anything else relevant.
>> How are you determining that there are are still jump tables? Please post
>> the exact commands you used to determine that also.
>>
>> One thing to try is to use "-gcflags=all=-N -l" instead of just
>> "-gcflags=-N -l".
>>
>>
>> On Friday, November 29, 2024 at 2:58:01 AM UTC-8 Karolina GORNA wrote:
>>
>> Hello everyone,
>>
>> @Lin thank you for your feedback. However, I don't want to add a
>> constraint on rewriting switch cases in if/else, I would be happy that the
>> compiler can handle it at its end. For instance, GCC is able to remove jump
>> tables even when there are switch cases in the source code with the option
>> "-fno-jump-tables".
>>
>> @Keith, the example I took was the simple Go code below, so no cgo
>> involved. I built it with the command *go build -gcflags='-N -l' . . *I
>> analyzed the binary in Ghidra and I saw the switch tables I mentioned
>> (being actually jump tables) in the .rodata section.
>> --> However, I figured out that by using the command *go build -o
>> <bin-name> -compiler=gccgo -gccgoflags='-fno-jump-tables' . *, I
>> successfully get a binary of the same code without jump tables in the
>> .rodata section. The issue with GCCGO is that it doesn't handle Go
>> functionalities about Go1.18 (see
>> https://www.mail-archive.com/[email protected]/msg1983336.html
>> <https://www.mail-archive.com/[email protected]/msg1983336.html>)
>>
>> so it's quite limiting.
>> ----------------------------------------------
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *package mainimport "fmt"func main() { x := 10 switch x { case
>> 1: fmt.Println("One") case 5: fmt.Println("Five") case
>> 10: fmt.Println("Ten") default: fmt.Println("Other") }}*
>> ----------------------------------------------
>>
>> @Ian, I'm working on bug detection, and there seems to be more
>> granularity and therefore more accuracy in analyzing low-level code than
>> source code.
>>
>> Best,
>> Karolina
>> On Friday, November 29, 2024 at 6:39:02 AM UTC+1 Ian Lance Taylor wrote:
>>
>> On Thu, Nov 28, 2024, 1:13 AM 'Karolina GORNA' via golang-nuts <
>> [email protected]> wrote:
>>
>>
>> @Ian, ok I understand thank you. I am working on Go binary analysis and
>> this feature would help a lot.
>>
>>
>> Out of curiosity, why do you want to do binary analysis on a program if
>> you can ask for specific options to be used when building? Why not just do
>> source analysis, for which there are a bunch of good tools available?
>>
>> Ian
>>
>>
>> ------------------------------
>> Les informations contenues dans ce message électronique ainsi que celles
>> contenues dans les documents attachés sont strictement confidentielles et
>> sont destinées à l'usage exclusif du (des) destinataire(s) nommé(s).
>> Toute divulgation, distribution ou reproduction, même partielle, en est
>> strictement interdite sauf autorisation écrite et expresse de l’émetteur.
>> Si vous recevez ce message par erreur, veuillez le notifier immédiatement
>> à son émetteur par retour, et le détruire ainsi que tous les documents qui
>> y sont attachés.
>>
>> The information contained in this email and in any document enclosed is
>> strictly confidential and is intended solely for the use of the individual
>> or entity to which it is addressed.
>> Partial or total disclosure, distribution or reproduction of its contents
>> is strictly prohibited unless expressly approved in writing by the sender.
>> If you have received this communication in error, please notify us
>> immediately by responding to this email, and then delete the message and
>> its attached files from your system.
>> ------------------------------
>>
>>
> ------------------------------
> Les informations contenues dans ce message électronique ainsi que celles
> contenues dans les documents attachés sont strictement confidentielles et
> sont destinées à l'usage exclusif du (des) destinataire(s) nommé(s).
> Toute divulgation, distribution ou reproduction, même partielle, en est
> strictement interdite sauf autorisation écrite et expresse de l’émetteur.
> Si vous recevez ce message par erreur, veuillez le notifier immédiatement
> à son émetteur par retour, et le détruire ainsi que tous les documents qui
> y sont attachés.
>
> The information contained in this email and in any document enclosed is
> strictly confidential and is intended solely for the use of the individual
> or entity to which it is addressed.
> Partial or total disclosure, distribution or reproduction of its contents
> is strictly prohibited unless expressly approved in writing by the sender.
> If you have received this communication in error, please notify us
> immediately by responding to this email, and then delete the message and
> its attached files from your system.
> ------------------------------
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/golang-nuts/c94266cf-9281-4160-838d-ce081724be92n%40googlegroups.com.