In a 5-quart Dutch oven or other large, heavy pot, heat the olive oil over a medium flame. Add the onions and, stirring frequently to prevent burning, sauté until they reach a golden color, approximately 30 minutes. Add the butter, garlic, thyme, bay leaf, salt, and pepper and cook for 10 minutes. Raise the heat to high, add the white wine, bring to a boil, and reduce the wine by half, about 3 to 5 minutes. Add the chicken stock and simmer for 45 minutes.
Preheat the broiler.
Remove the thyme springs and bay leaf, and swirl the port into the finished soup. Ladle the soup into the 6 ovenproof bowls. Fit the toasted bread into the bowls on top of the liquid, and sprinkle 1/3 cup of Gruyere onto each slice. Place under the broiler for 3 minutes, or until the cheese melts to a crispy golden brown. Allow the soup to cool slightly, about 3 minutes, before serving.