What is the purpose of "-Wa,option" in GCC?

Since these options are passed to the assembler, you need to check the man page for as, not gcc.

-a turns on assembly output listings (which is written to standard output), while -ad omits any debugging directive from the output listing.


Always check the Documentation

-Wa,option
Pass option as an option to the assembler. If option contains commas, it is split into multiple options at the commas.

So in your case -a and -ad were passed to the assembler, what those do depend on your assembler. Gcc doesn't know what to do with system-specific assembler options so giving it the -Wa flag lets it know to just pass whatever follows through.

You can also find the documentation locally via man pages. To open the documentation on GNU's assembler, perform:

$ man 1 as

It will open:

AS(1)                        GNU Development Tools                       AS(1)

NAME
       AS - the portable GNU assembler.

SYNOPSIS
       as [-a[cdghlns][=file]] [--alternate] [-D]
        [--compress-debug-sections]  [--nocompress-debug-sections]
        [--debug-prefix-map old=new]
        [--defsym sym=val] [-f] [-g] [--gstabs]
        [--gstabs+] [--gdwarf-2] [--gdwarf-sections]
        [--help] [-I dir] [-J]
        [-K] [-L] [--listing-lhs-width=NUM]
        [--listing-lhs-width2=NUM] [--listing-rhs-width=NUM]
        [--listing-cont-lines=NUM] [--keep-locals] [-o
        objfile] [-R] [--reduce-memory-overheads] [--statistics]
        [-v] [-version] [--version] [-W] [--warn]
        [--fatal-warnings] [-w] [-x] [-Z] [@FILE]
        [--size-check=[error|warning]]
        [--target-help] [target-options]
        [--|files ...]
        ...

In order to see a list of options of any command in bash, you can run the following command:

man COMMAND

In this case

man gcc

will reveal that -Wa,option means the following:

Pass option as an option to the assembler. If option contains commas, it is split into multiple options at the commas.